4

これがここに何度も投稿されているのを見てきました。コマンドから意図的なエラーをキャプチャできませんでした。これまでに見つけた最高の部分作業..

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()
4

2 に答える 2

2

「datdsade」が実際に stderr に書き込むことを 100% 確信していますか? その場合、stderr をバッファリングしているか、ブロックしている可能性があります。

編集: bash で「datdsade」(プログラム) を実行し (Linux を使用していると仮定すると、Windows の場合は sh.exe を dl できます)、stderr をファイル datdsade 2> errors.txt にキャプチャできるかどうかを確認することをお勧めします。Windows を使用している場合、stderr は DOS ウィンドウに出力されないことに注意してください。最初にログファイルに書き込んで読み返すか、Python で変数に保存する方がうまくいくかもしれません。

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

再度編集: communicate() がこれらすべてをキャプチャしているため、上記は無視してください。問題は、選択したプログラムが stderr に書き込まないか、実際にエラーをトリガーしていないことです。これは、プログラムが書かれた方法です。プログラムは何ですか?

于 2009-05-27T06:56:31.617 に答える