繁体   English   中英

间歇性“OSError: [Errno 7] Argument list too long”和短命令(~125 个字符)

[英]Intermittent “OSError: [Errno 7] Argument list too long” with short command (~125 chars)

此代码在 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

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

该问题似乎发生在 Web 服务器运行了很长时间之后,并随着重新启动而消失,但是很难确定触发因素可能是什么。

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

这个问题非常类似于Linux中的Python OSError no 7 (Argument list too long),没有一个令人满意的答案。

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

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

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

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

它是类的__init__() os.environ创建新对象时, os.environ变长,最终变得“太长”。

在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

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

该问题似乎是在Web服务器运行了很长时间之后发生的,并且随着重新启动而消失了,但是很难确切地确定触发器可能是什么。

为什么会出现错误,我该怎么办?

这个问题与linux中的Python OSError no 7(参数列表过长)非常相似,后者没有令人满意的答案。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM