Search code examples
linuxpython-2.7pathfilesystemsmax-path

How do I get in python the maximum filesystem path length in unix?


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

Solution

  • 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.