我使用Popen功能从子模块执行一个命令行工具:什么是args参数的subprocess.Popen max长度?
subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)
我使用这个工具把文件,它随后进程的列表。在某些情况下,这个文件列表可能会很长。有没有办法找到args参数可以达到的最大长度?随着被传递到工具大量文件,我收到以下错误:
Traceback (most recent call last):
File "dump_output_sopuids.py", line 68, in <module>
uid_map = create_sopuid_to_path_dict_dcmdump(dicom_files)
File "dump_output_sopuids.py", line 41, in create_sopuid_to_path_dict_dcmdump
dcmdump_output = subprocess.Popen(cmd,stdout=subprocess.PIPE).communicate(0)[0]
File "c:\python26\lib\subprocess.py", line 621, in __init__
errread, errwrite)
File "c:\python26\lib\subprocess.py", line 830, in _execute_child
startupinfo)
WindowsError: [Error 206] The filename or extension is too long
有没有找到这个最大长度的一般方法?我在msdn上找到了以下文章:Command prompt (Cmd. exe) command-line string limitation,但我不想在该值中进行硬编码。我宁愿在运行时获取该值,以将命令分解为多个调用。
我使用Python 2.6在Windows XP 64
编辑:添加代码示例
paths = ['file1.dat','file2.dat',...,'fileX.dat']
cmd = ['process_file.exe','+p'] + paths
cmd_output = subprocess.Popen(cmd,stdout=subprocess.PIPE).communicate(0)[0]
出现问题的原因在paths
列表中的每个实际入口通常是一个非常长的文件路径和有有几千人。
我不介意将命令分解为多次调用process_file.exe
。我正在寻找一种通用的方法来获取参数的最大长度,所以我知道每次运行需要发送多少路径。
你能提供的您提供什么ARGS一个例子价值? – 2010-03-04 17:56:41
我很晚参加派对,但我想补充说,由于我的PATH环境变量在添加很多条目后变得太长,我得到了同样的错误。 – RedX 2015-12-21 12:58:08