How do I get in python the maximum filesystem path

2020-07-20 04:05发布

In the code I maintain I run across:

from ctypes.wintypes import MAX_PATH

I would like to change it to something like:

try:
    from ctypes.wintypes import MAX_PATH
except ValueError: # raises on linux
    MAX_PATH = 4096 # see comments

but I can't find any way to get the value of max filesystem path from python (os, os.path, sys...) - is there a standard way or do I need an external lib ?

Or there is no analogous as MAX_PATH in linux, at least not a standard among distributions ?


Answer

try:
    MAX_PATH = int(subprocess.check_output(['getconf', 'PATH_MAX', '/']))
except (ValueError, subprocess.CalledProcessError, OSError):
    deprint('calling getconf failed - error:', traceback=True)
    MAX_PATH = 4096

2条回答
时光不老,我们不散
2楼-- · 2020-07-20 04:51

The way to do it correctly is to use the os.pathconf or os.fpathconf with PC_ prefixed names:

>>> os.pathconf('/', 'PC_PATH_MAX')
4096
>>> os.pathconf('/', 'PC_NAME_MAX')
255

Notice that the maximum length of a path component may vary from directory to another, as it is filesystem dependent!

查看更多
Emotional °昔
3楼-- · 2020-07-20 05:00

You can read this values from files:

* PATH_MAX (defined in limits.h)
* FILENAME_MAX (defined in stdio.h)

Or use subprocess.check_output() with getconf function:

$ getconf NAME_MAX /
$ getconf PATH_MAX /

as in the following example:

name_max = subprocess.check_output("getconf NAME_MAX /", shell=True)
path_max = subprocess.check_output("getconf PATH_MAX /", shell=True)

to get values and fpath to set different values for files.

查看更多
登录 后发表回答