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上找到了以下文章:命令提示符(Cmd.exe)命令行字符串限制,但我不想硬编码该值。我宁愿在运行时获取该值以将命令分解为多个调用。
我正在使用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
的调用。 我正在寻找一种通用的方法来获取参数的最大长度,以便我知道每次运行发送多少路径。