我正在试图打开一个新的subprocess,这将需要几个input文件,并在其他文件中生成输出。 虽然这大多数时候干净地运行,当我试图做一些压力testing这失败,并给我以下错误跟踪:
File "/home/admin/Workspace/.metadata/.plugins/org.eclipse.pde.core/pde-junit/org.eclipse.osgipython/util/media_info.py", line 161, in external_process process = subprocess.Popen(command, shell=shell, close_fds=True, stderr=subprocess.PIPE) File "/usr/local/lib/python2.6/subprocess.py", line 623, in __init__ errread, errwrite) File "/usr/local/lib/python2.6/subprocess.py", line 1141, in _execute_child raise child_exception OSError: [Errno 7] Argument list too long
起初,我认为我传递的命令(这是4个文件的绝对path)比操作系统能够支持的要长。 但是即使减less了传递到原始值的四分之一的绝对path。 我仍然得到这个错误。 请注意,我一直没有得到这个错误。 大多数情况下,它经过1000或更多的运行,而所有情况下的path长度保持不变。
strace是你的朋友。 抛出-s 2048来看看真正发生了什么。 了解C将帮助你阅读这个,但是你仍然可以在没有C知识的情况下选择长的exec *字符串。
http://stromberg.dnsalias.org/~strombrg/debugging-with-syscall-tracers.html