对Python捕获控制台输出流的方法详解

yipeiwu_com6年前Python基础

有时候我们的代码里可能要调用控制台命令,比如我想用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()

成功会返回一个tuple,例如(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捕获控制台输出流的方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

python实现统计代码行数的方法

本文实例讲述了python实现统计代码行数的方法。分享给大家供大家参考。具体实现方法如下: ''' Author: liupengfei Function: count lines...

Python中声明只包含一个元素的元组数据方法

调试程序的时候,就吃过这个亏,不知道为何Python使用括号做元组声明边界符,估计是找不到合适的符号了。中括号用来声明列表,花括号用来声明字典,元组号只能用括号来声明了。有其他语言编程经...

python 接口_从协议到抽象基类详解

python 接口_从协议到抽象基类详解

抽象基类的常见用途:实现接口时作为超类使用。然后,说明抽象基类如何检查具体子类是否符合接口定义,以及如何使用注册机制声明一个类实现了某个接口,而不进行子类化操作。最后,说明如何让抽象基类...

Win10环境python3.7安装dlib模块趟过的坑

Win10环境python3.7安装dlib模块趟过的坑

在头条看了一篇文章,说五行代码实现人脸识别,一时感兴趣了,来搞搞 先是按照文章说的 操作了几步,到后面虽然,import dlib 不报错,但是 代码里面运行的时候 detector...

如何基于Python实现电子邮件的发送

如何基于Python实现电子邮件的发送

这篇文章主要介绍了如何基于Python实现电子邮件的发送,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 利用Python smtpli...