我在这里看到过很多次这样的帖子,但却未能捕捉到来自命令的故意错误。到目前为止我找到的最好的部分作品..
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()发布于 2014-06-12 04:03:48
这对我来说非常有效:
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发布于 2009-05-27 06:56:32
你100%确定'datdsade‘真的写到stderr了吗?如果是这样,那么它可能正在缓冲它的stderr,或者阻塞它。
编辑:我建议在bash中运行' datdsade‘(你的程序)(假设你有linux,你可以在windows上运行dl sh.exe ),看看你是否能将你的stderr捕获到一个datdsade 2> errors.txt文件中。请注意,如果您是在Windows stderr上,将不会在DOS窗口中输出。您可能更幸运的是,先写入日志文件,然后读回它,或者让python将它存储在一个变量中。
或者,stderr=sub.STDOUT会将您的错误与标准输出合并。
再次编辑:忽略上面的内容,因为communicate()捕获了所有这些内容。我会说,问题很明显是你选择的程序从来没有写入stderr,或者你实际上没有触发一个错误。这就是程序的编写方式。计划是什么?
https://stackoverflow.com/questions/914320
复制相似问题