【问题标题】:Python OSError no 7 (Argument list too long ) in linuxlinux中的Python OSError no 7(参数列表太长)
【发布时间】:2012-01-23 10:21:23
【问题描述】:

我正在尝试打开一个新的子进程,它将接受一些输入文件并在其他文件中生成输出。虽然这在大多数情况下都运行得很干净,但当我尝试进行一些压力测试时,它会失败并给我以下错误跟踪:

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 次或更多次运行,而路径长度在所有情况下都保持不变。

【问题讨论】:

  • command的值是多少?
  • 你的代码在哪里?您确定 command 变量中没有累积某些内容吗?
  • 否,命令变量是一个长度约为 200 个字符的字符串。这当然不会跨越任何操作系统限制。我正在打印这个值,我很确定那里没有任何积累。

标签: python linux


【解决方案1】:

strace 是你的朋友。输入 -s 2048 以查看实际情况。了解 C 将帮助您阅读本文,但您仍然可以在没有 C 知识的情况下挑选长 exec* 字符串。

http://stromberg.dnsalias.org/~strombrg/debugging-with-syscall-tracers.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 2019-06-03
    • 2017-11-30
    • 2020-05-09
    • 2014-05-21
    相关资源
    最近更新 更多