如何在python中获取unix中的最大文件系统路径长度?

时间:2015-09-27 11:47:14

标签: linux python-2.7 path filesystems max-path

在我维护的代码中,我遇到了:

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...)获取max filesystem路径的值 - 是否有标准方法或者我需要外部lib?

或者在linux中没有与MAX_PATH类似的东西,至少不是分布中的标准?

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 个答案:

答案 0 :(得分:2)

您可以从文件中读取此值:

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

或者使用带有getconf函数的subprocess.check_output():

$ 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为文件设置不同的值。

答案 1 :(得分:2)

正确地做到这一点的方法是使用带有os.pathconf前缀名称的os.fpathconfPC_

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

请注意,路径组件的最大长度可能因目录而异,因为它取决于文件系统!