subprocess.Popen不会将错误存储到错误文件中

时间:2014-06-29 20:07:56

标签: python popen

我试图使用subprocess.Popen从另一个python脚本执行python脚本。我的命令是:

outf = open('out.txt','w+')
errf = open('err.txt','w+')
p = subprocess.Popen([cmd],stdin=inf,stdout=outf,stderr=errf,shell=True)

以前定义了所有必需的。管道到stdout文件没有问题。但是,当python脚本中存在错误时,它会以错误退出。该错误既不存储在stdout文件中,也不存储在stderr文件中。我该怎么做?

我使用p.returncode因错误而退出文件。但是如何获得错误追溯?

2 个答案:

答案 0 :(得分:0)

这对我有用:

$ cat pytest1.py 
#!/usr/bin/env python

for i in ranger(5):
    print "hi"

>>> outf = open('out.txt','w+')
>>> errf = open('err.txt','w+')
>>> p = subprocess.Popen(["./pytest1.py"],stdout=outf,stderr=errf,shell=True)
>>> a,b = p.communicate()
>>> p.returncode
1
>>> a
>>> b

您也可以使用:

>>> p = subprocess.Popen("./pytest1.py",stdout=outf,stderr=errf,shell=True)

错误填充在err.txt

$ cat out.txt
$ cat err.txt
Traceback (most recent call last):
  File "./pytest1.py", line 3, in <module>
    for i in ranger(5):
NameError: name 'ranger' is not defined

答案 1 :(得分:0)

抱歉这是我的错误..我打开文件&#39; w +&#39;权限并读取该文件指针。所以我没有显示任何数据。我关闭它并打开读取权限,然后阅读内容,它工作正常。