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


Posted in Python onJanuary 07, 2019

有时候我们的代码里可能要调用控制台命令,比如我想用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学习笔记之常用函数及说明
May 23 Python
Python中处理unchecked未捕获异常实例
Jan 17 Python
Python操作CouchDB数据库简单示例
Mar 10 Python
python变量不能以数字打头详解
Jul 06 Python
python opencv实现证件照换底功能
Aug 19 Python
Windows平台Python编程必会模块之pywin32介绍
Oct 01 Python
python 检查数据中是否有缺失值,删除缺失值的方式
Dec 02 Python
python实现高斯判别分析算法的例子
Dec 09 Python
解决安装pyqt5之后无法打开spyder的问题
Dec 13 Python
Python 限定函数参数的类型及默认值方式
Dec 24 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
Jan 08 Python
Python中Selenium对Cookie的操作方法
Jul 09 Python
python print输出延时,让其立刻输出的方法
Jan 07 #Python
Python3 单行多行万能正则匹配方法
Jan 07 #Python
Python字符串的全排列算法实例详解
Jan 07 #Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
Jan 07 #Python
Python进阶之自定义对象实现切片功能
Jan 07 #Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
Jan 07 #Python
python读取几个G的csv文件方法
Jan 07 #Python
You might like
Linux系统中设置多版本PHP共存配合Nginx服务器使用
2015/12/21 PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
2016/03/07 PHP
PHP中子类重载父类的方法【parent::方法名】
2016/05/06 PHP
Laravel + Elasticsearch 实现中文搜索的方法
2020/02/02 PHP
js继承 Base类的源码解析
2008/12/30 Javascript
在浏览器窗口上添加遮罩层的方法
2012/11/12 Javascript
javascript 实现简单的table排序及table操作练习
2012/12/28 Javascript
js 输出内容到新窗口具体实现代码
2013/05/31 Javascript
代码触发js事件(click、change)示例应用
2013/12/13 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
2015/09/01 Javascript
Bootstrap学习笔记之css样式设计(1)
2016/06/07 Javascript
第一次动手实现bootstrap table分页效果
2016/09/22 Javascript
javascript创建对象的3种方法
2016/11/02 Javascript
JS 终止执行的实现方法
2016/11/24 Javascript
详解Node.js 命令行程序开发教程
2017/06/07 Javascript
详解webpack 如何集成第三方js库
2017/06/29 Javascript
小程序实现订单倒计时功能
2019/04/23 Javascript
vue项目添加多页面配置的步骤详解
2019/05/22 Javascript
微信小程序后端无法保持session的原因及解决办法问题
2020/03/20 Javascript
vue滑动吸顶及锚点定位的示例代码
2020/05/10 Javascript
[14:00]DOTA2国际邀请赛史上最长大战 赛后专访B神
2013/08/10 DOTA
解决python2.7 查询mysql时出现中文乱码
2016/10/09 Python
使用python打印十行杨辉三角过程详解
2019/07/10 Python
浅析Python3 pip换源问题
2020/01/06 Python
用python写PDF转换器的实现
2020/10/29 Python
美国专业汽车音响和移动电子产品零售商:Car Toys
2019/05/13 全球购物
八年级历史教学反思
2014/01/10 职场文书
企业承诺书格式
2014/05/21 职场文书
保护环境标语
2014/06/09 职场文书
合作协议书格式
2014/08/19 职场文书
2014教师“四风问题”对照检查材料思想汇报
2014/09/16 职场文书
作风转变年心得体会
2014/10/22 职场文书
先进单位申报材料
2014/12/25 职场文书
2015年行政人事工作总结
2015/05/21 职场文书
副校长2015年教育教学工作总结
2015/07/27 职场文书
Oracle 区块链表创建过程详解
2021/05/15 Oracle