我正在尝试打开一个新的子进程,它将获取一些输入文件并在其他文件中生成输出。虽然大部分时间都运行得很干净,但当我尝试进行一些压力测试时,这会失败并给出以下错误跟踪:
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个文件的绝对路径)比操作系统可以支持的要长。但即使减少了绝对路径后传递到原始值的1/4。我仍然得到这个错误。请注意,我不会一直收到此错误。大多数情况下,它经过1000次或更多次运行,而路径长度在所有情况下保持不变。
答案 0 :(得分:2)
strace是你的朋友。投掷-s 2048,看看究竟发生了什么。知道C会帮助你阅读这篇文章,但是你仍然可以在没有C知识的情况下选出长的exec *字符串。
http://stromberg.dnsalias.org/~strombrg/debugging-with-syscall-tracers.html