【发布时间】:2016-03-30 14:22:26
【问题描述】:
Python 2.6.9 (unknown, Mar 7 2016, 11:15:18)
[GCC 5.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> import subprocess
>>> subprocess.check_call(['echo', 'hi'], stderr=sys.stdout)
echo: write error: Bad file descriptor
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/subprocess.py", line 488, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['echo', 'hi']' returned non-zero exit status 1
此命令subprocess.check_call(['echo', 'hi'], stderr=sys.stdout) 在 Python 2.7 和 Python 3 中运行良好。Python 2.6 有何不同之处?
【问题讨论】:
-
会是路径还是权限?
subprocess.check_call(['/bin/echo', 'hi'], stderr=sys.stdout)有效吗? -
hm,肯定与
stderr的重定向有关,虽然我无法快速看到 subprocess.py 中 2.6 和 2.7 之间的变化。 -
@jDo 给出相同的结果。我认为如果这是一个权限问题,在 2.6 和 2.7 中会是一样的吗?
-
如果你想重定向输出,文档建议直接使用
Popen,所以也许这是一种解决方法,尽管找出发生这种情况的原因仍然很有趣。 -
天哪,即使使用
stderr=1也会发生此错误。 Python 2.7 看到了 很多 的subprocess模块工作,很难找出解决此问题的确切更改。
标签: python python-2.6