【问题标题】:Intermittent "OSError: [Errno 7] Argument list too long" with short command (~125 chars)使用短命令(~125 个字符)间歇性“OSError:[Errno 7] 参数列表太长”
【发布时间】:2014-09-07 10:11:37
【问题描述】:

在 Linux 的 apache2+mod_wsgi 下运行的这段代码有时会产生以下输出。

   notes.py
            cmd_list = [
                    'abc_generate_pdf',
                    '--cdb-url-prefix', model.config('cdb_url_prefix'),
                    '--request-cid', request_cid,
            ]
            log.info("About to run: {!r}".format(cmd_list))
            subprocess.Popen(cmd_list)
...
2014-07-16 11:03:44,779 INFO     pid:17925,140353357215488 abc.webapp.check.notes:198:approval_revoke About to run: ['abc_generate_pdf', '--cdb-url-prefix', 'xxxxdev', '--request-cid', u'xxxxx_xxx_2014-07-15_16.12.50.108807_685932a62c7c6226987acdeda367dbc3']
2014-07-16 11:03:45,250 ERROR    pid:17925,140353357215488 abc.webapp.check.notes:208:approval_revoke Unknown error; approval not updated.
Traceback (most recent call last):
  File "/home/abc/abc/webapp/check/notes.py", line 199, in approval_revoke
    subprocess.Popen(cmd_list)
  File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
    raise child_exception
OSError: [Errno 7] Argument list too long

输出已被稍微匿名化,但字符数保持准确。

这个问题似乎是在网络服务器运行很长时间后发生的,重启后就消失了,但是很难确切地确定触发器可能是什么。

为什么我会收到错误,我可以做些什么来防止它?

这个问题和Python OSError no 7 (Argument list too long ) in linux很像,没有满意的答案。

编辑:我应该注意,问题也发生在纯 python werkzeug 服务器下。

【问题讨论】:

  • 是否值得尝试使用shell=True进行调试?
  • 可能。我更愿意在使用创可贴之前了解这个问题,但这可能会导致更冗长的错误。我会试一试,尽管可能需要一段时间才能使进程变得足够老以再次实际出现问题。

标签: python linux python-2.7 subprocess


【解决方案1】:

我们遇到了类似的问题,也困扰了我们很长一段时间。今天,我们找到了根本原因。

错误信息有点误导,不是命令行的“参数”太长,实际上是操作系统环境与命令一起传递的。在这种情况下,Python os.environ。在我们的代码库中,只有一行代码:

os.environ['PATH'] =  ':'.join([os.environ['PATH'], self.clitoolsdir])

它是类__init__() 的一部分。每当创建新对象时,os.environ 就会变长,最终变得“太长”。

【讨论】:

  • 非常感谢您发布此解决方案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-30
  • 2015-07-05
  • 1970-01-01
  • 2014-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多