2009-05-27 21 views
4

これは何度もここに投稿されています。コマンドから意図的なエラーを捕捉できませんでした。ベスト部分の仕事私がこれまでに発見した。..python subprocess.Popen(コマンド、stderr = subprocess.PIPE、stdout = subprocess.PIPE)のstderrをキャプチャします。

from Tkinter import * 
import os 
import Image, ImageTk 
import subprocess as sub 
p = sub.Popen('datdsade',stdout=sub.PIPE,stderr=sub.PIPE) 
output, errors = p.communicate() 

root = Tk() 
text = Text(root) 
text.pack() 
text.insert(END, output+ "Error: " + errors) 
root.mainloop() 
+1

おかげで上のスポット。明確にするために "PyMOTW:ダグ・ヘルマンによってサブプロセス" のTkinterのインポートから、ここで[http://www.oreillynet.com/onlamp/blog/2007/08/pymotw_subprocess_1.html] * 輸入サブプロセス PROC =サブプロセス.Popen( 'TestSomeCommandThatDoesNotExisit'、シェル= Trueを、STDIN = subprocess.PIPE、STDOUT = subprocess.PIPE、標準エラー= subprocess.STDOUT) stdout_value、stderr_value = proc.communicate() ルート= Tkの() テキスト=テキスト(ルート) text.pack() text.insert(END、repr(stdout_value)) root.mainloop( 私はstderr = sub.STDOUTをマージしていませんでした。 お返事ありがとうございます。 〜nolo –

答えて

2

あなたは「datdsade」は、実際にstderrに書き込みが100%か?もしそうなら、おそらくそれはその標準エラーをバッファリングしているか、それをブロックしています。

編集:私は(Linuxを持っていると仮定すると、Windows用sh.exeをdlとすることができます)bashで「datdsade」(あなたのプログラム)を実行し、ファイルのdatdsade 2に、あなたの標準エラー出力をキャプチャすることができるかどうか見てお勧めしたい>エラー。TXT。 Windows標準エラー出力の場合はがDOSウィンドウに出力されないことに注意してください。最初にログファイルに書き込むことが多いかもしれませんし、それを読んだり、Pythonで変数に格納したりすることもできます。

また、stderr = sub.STDOUTはエラーをstdoutとマージします。

さらに編集:communications()がこれをすべてキャプチャしているので、上記を無視してください。あなたが選んだプログラムが決してstderrに書き込まないという問題、または実際にはエラーを引き起こしていないということです。これはプログラムが書かれた方法です。プログラムは何ですか?

+0

あなたは何をお勧めしますか?読書にかなり時間を費やしました。まだほとんどのものは廃止された使用法を指摘しています。 o.spawnなど。 事前に感謝:) –

5

これは私のために完璧に動作します:あなたの答えのマリファナたばこ用

import subprocess 
try: 
    #prints results 
    result = subprocess.check_output("echo %USERNAME%", stderr=subprocess.STDOUT, shell=True) 
    print result 
    #causes error 
    result = subprocess.check_output("copy testfds", stderr=subprocess.STDOUT, shell=True) 
except subprocess.CalledProcessError, ex: 
    print "--------error------" 
    print ex.cmd 
    print ex.message 
    print ex.returncode 
    print ex.output 
関連する問題