Python捕获控制台输出流的两种方法对比
本文介绍在Python中调用外部命令时捕获输出流的两种常见方式。通过对比os.system与commands.getstatusoutput,分析它们在返回执行状态码及获取详细提示信息方面的差异,帮助开发者选择合适的方法来处理编译或脚本执行过程中的错误日志。
在实际开发中,我们可能需要通过Python脚本调用外部控制台命令。例如,编写一个用于批量编译Java文件的脚本时,通常会涉及如下代码实现。
常规用法 os.system
import os,traceback
try:
p = os.system("javac Test.java")
print p
except:
print "\nexcept:\n"
print traceback.format_exc()
如果编译成功,该函数会返回状态码0;若出现错误,则返回非0值给变量p。这种方法虽然能判断执行结果,但无法捕获关键的提示信息,例如:“错误: 找不到文件: Tst.java”。
0
错误: 找不到文件: Tst.java 用法: javac <选项> <源文件> 使用 --help 可列出可能的选项 512
接下来我们尝试使用 commands.getstatusoutput 来捕获完整的输出流。
import commands,traceback
try:
res = commands.getstatusoutput("javac Test.java")
print res
print res[1]
except:
print "\nexcept:\n"
print traceback.format_exc()
当命令执行成功时,该函数返回一个元组,例如(0, ' '),其中第一个元素表示状态(0代表成功),第二个元素为输出信息。如果执行出错,则返回类似下面的结果。
(512, '\xe9\x94\x99\xe8\xaf\xaf: \xe6\x89\xbe\xe4\xb8\x8d\xe5\x88\xb0\xe6\x96\x87\xe4\xbb\xb6: Tst.java\n\xe7\x94\xa8\xe6\xb3\x95: javac <\xe9\x80\x89\xe9\xa1\xb9> <\xe6\xba\x90\xe6\x96\x87\xe4\xbb\xb6>\n\xe4\xbd\xbf\xe7\x94\xa8 --help \xe5\x8f\xaf\xe5\x88\x97\xe5\x87\xba\xe5\x8f\xaf\xe8\x83\xbd\xe7\x9a\x84\xe9\x80\x89\xe9\xa1\xb9') 错误: 找不到文件: Tst.java 用法: javac <选项> <源文件> 使用 --help 可列出可能的选项
以上关于Python捕获控制台输出流的方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













