如何在 python 中获取 unix 中的最大文件系统路径长度?
How do I get in python the maximum filesystem path length in unix?
在我维护的代码中,我 运行 跨越:
from ctypes.wintypes import MAX_PATH
我想将其更改为:
try:
from ctypes.wintypes import MAX_PATH
except ValueError: # raises on linux
MAX_PATH = 4096 # see comments
但我找不到任何方法从 python (os, os.path, sys...
) 获取最大文件系统路径的值 - 是否有标准方法或我是否需要外部库?
或者 linux 中没有类似 MAX_PATH 的东西,至少不是发行版中的标准?
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
您可以从文件中读取这些值:
* PATH_MAX (defined in limits.h)
* FILENAME_MAX (defined in stdio.h)
或将 subprocess.check_output() 与 getconf 函数一起使用:
$ getconf NAME_MAX /
$ getconf PATH_MAX /
如下例所示:
name_max = subprocess.check_output("getconf NAME_MAX /", shell=True)
path_max = subprocess.check_output("getconf PATH_MAX /", shell=True)
获取值,fpath为文件设置不同的值。
正确的方法是使用带有PC_
前缀名称的os.pathconf
或os.fpathconf
:
>>> os.pathconf('/', 'PC_PATH_MAX')
4096
>>> os.pathconf('/', 'PC_NAME_MAX')
255
请注意,路径组件的最大长度可能因目录而异,因为它取决于文件系统!
在我维护的代码中,我 运行 跨越:
from ctypes.wintypes import MAX_PATH
我想将其更改为:
try:
from ctypes.wintypes import MAX_PATH
except ValueError: # raises on linux
MAX_PATH = 4096 # see comments
但我找不到任何方法从 python (os, os.path, sys...
) 获取最大文件系统路径的值 - 是否有标准方法或我是否需要外部库?
或者 linux 中没有类似 MAX_PATH 的东西,至少不是发行版中的标准?
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
您可以从文件中读取这些值:
* PATH_MAX (defined in limits.h)
* FILENAME_MAX (defined in stdio.h)
或将 subprocess.check_output() 与 getconf 函数一起使用:
$ getconf NAME_MAX /
$ getconf PATH_MAX /
如下例所示:
name_max = subprocess.check_output("getconf NAME_MAX /", shell=True)
path_max = subprocess.check_output("getconf PATH_MAX /", shell=True)
获取值,fpath为文件设置不同的值。
正确的方法是使用带有PC_
前缀名称的os.pathconf
或os.fpathconf
:
>>> os.pathconf('/', 'PC_PATH_MAX')
4096
>>> os.pathconf('/', 'PC_NAME_MAX')
255
请注意,路径组件的最大长度可能因目录而异,因为它取决于文件系统!