Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在python中获得unix中的最大文件系统路径长度?_Linux_Python 2.7_Path_Filesystems_Max Path - Fatal编程技术网

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

Linux 如何在python中获得unix中的最大文件系统路径长度?,linux,python-2.7,path,filesystems,max-path,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中获取max filesystem path的值(os,os.path,sys…)-有没有标准方法或者我

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

from ctypes.wintypes import MAX_PATH
我想将其更改为:

try:
    from ctypes.wintypes import MAX_PATH
except ValueError: # raises on linux
    MAX_PATH = 4096 # see comments
但是我找不到任何方法从python中获取max filesystem path的值(
os,os.path,sys…
)-有没有标准方法或者我需要一个外部库

或者linux中没有类似的MAX_路径,至少在发行版中没有标准



您可以从以下文件中读取这些值:

* PATH_MAX (defined in limits.h)
* FILENAME_MAX (defined in stdio.h)
或使用子流程。将_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)

获取值并为文件设置不同的值。

正确操作的方法是使用带有前缀名的
os.pathconf
os.fpathconf

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

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

它在Linux上是4096-@jornsharpe:没有编程的方法来获取它?首先要做的事情-是否使用
shell=True
来避免传递绝对路径?这个getconf调用是可移植的吗?我可以需要使用它的根权限吗?1
shell=True
使指定的命令将通过shell 2执行。getconf调用在unix/linux系统中是可移植的,而不是在windows 3中。不需要根目录。额外的工作量为-1,请确定+1。shell=True-我知道它的作用,但它在这里有什么区别(我测试时没有-I get
OSError:[Errno 2]没有这样的文件或目录
-为什么?)?换句话说,你能用波本重写一下吗?4.显然,我应该抓住所谓的过程错误和操作错误,以及。这里是:
name\u max=subprocess。检查输出([“getconf”,“name\u max”,““/”],shell=False)
=
name\u max=subprocess.Popen(“getconf name\u max/”,stdout=subprocess.PIPE,shell=True)
=
name\u max=subprocess.Popen([“getconf”,“name\u max”,““,“/”],stdout=subprocess.PIPE,shell=False)
当您传递shell=True时,Popen需要单个字符串参数,而不是列表。如果args是一个序列['1',],则第一项指定命令字符串,任何附加项都将被视为shell本身的附加参数。微小的区别是,如果子流程返回非零退出状态,check_输出将引发Python错误。使用Popen,您可以控制:
name_max=subprocess.Popen(“getconf name_max/”,stdout=subprocess.PIPE,shell=True)输出,error=process.communicate()retcode=process.poll()
谢谢与公认的答案有什么区别-为什么前缀属性更正确?@Mr\u和\u Mrs\D这会在几纳秒内调用python函数,而公认的答案会执行unix shell(bash)它执行一个程序,获取值并以字符串形式返回该值。谢谢-我的意思是
PC\u PATH\u MAX
vs
PATH\u MAX
。我猜PC代表pathconfig?奇怪的是,我质疑不同variables@Mr_and_Mrs_D这些是(不幸的)C库常量名称,尽管Python中不需要这样做。我不知道该怪谁。
>>> os.pathconf('/', 'PC_PATH_MAX')
4096
>>> os.pathconf('/', 'PC_NAME_MAX')
255