2014-06-29 22 views
1

我試圖使用subprocess.Popen從另一個python腳本執行python腳本。我的命令是:subprocess.Popen不會將異常存儲到錯誤文件中

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

所有需要的都是先前定義的。這對管道輸出到標準輸出文件沒有任何問題。但是,當python腳本中存在錯誤時,它會以錯誤退出。該錯誤既不存儲在stdout文件中,也不存儲在stderr文件中。我該怎麼做呢?

我通過使用p.returncode得知該文件由於錯誤而退出。但是,如何獲得錯誤追溯?

+0

請提供更多的上下文。你如何初始化'errf'? – Pavel

+0

@Pavel:已添加。此初始化沒有問題,因爲如果執行沒有錯誤,輸出將存儲在out.txt中 –

+0

您是否正確關閉文件?你應該打開這些文件,但不要關閉它們。 – Bakuriu

回答

0

對不起這個錯誤是我..我開具有'w +'權限的文件並對該文件指針進行讀取。所以我沒有得到任何數據顯示。我關閉它,並閱讀許可打開,然後閱讀內容,它工作正常。

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