![](/img/trans.png)
[英]OSError: [Errno 7] Argument list too long: 'php' - Python 3.6
[英]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.