对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删除java文件头上版权信息的方法
Jul 31 Python
python获取mp3文件信息的方法
Jun 15 Python
Python tornado队列示例-一个并发web爬虫代码分享
Jan 09 Python
Python简单实现控制电脑的方法
Jan 22 Python
pandas数据分组和聚合操作方法
Apr 11 Python
Python运维自动化之nginx配置文件对比操作示例
Aug 29 Python
详解Python Opencv和PIL读取图像文件的差别
Dec 27 Python
Python 读取xml数据,cv2裁剪图片实例
Mar 10 Python
python实现飞船大战
Apr 24 Python
Django 构建模板form表单的两种方法
Jun 14 Python
Python计算信息熵实例
Jun 18 Python
python中if嵌套命令实例讲解
Feb 25 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
PHP微信开发之查询城市天气
2016/06/23 PHP
静态html文件执行php语句的方法(推荐)
2016/11/21 PHP
一页面多XMLHttpRequest对象
2007/01/22 Javascript
JS的反射问题
2010/04/07 Javascript
javascript变量作用域使用中常见错误总结
2013/03/26 Javascript
浅谈Javascript 执行顺序
2013/12/18 Javascript
用js设置下拉框为只读的小技巧
2014/04/10 Javascript
jquery+php实现搜索框自动提示
2014/11/28 Javascript
javascript日期格式化方法汇总
2015/10/04 Javascript
JavaScript+html5 canvas制作的圆中圆效果实例
2016/01/27 Javascript
微信小程序 五星评价功能的实现
2017/03/09 Javascript
JavaScript实现的冒泡排序法及统计相邻数交换次数示例
2017/04/26 Javascript
JS实现动态给标签控件添加事件的方法示例
2017/05/13 Javascript
使用原生js封装的ajax实例(兼容jsonp)
2017/10/12 Javascript
JS实现的数组去除重复数据算法小结
2017/11/17 Javascript
如何解决webpack-dev-server代理常切换问题
2019/01/09 Javascript
VUE 动态组件的应用案例分析
2019/12/02 Javascript
axios封装与传参示例详解
2020/10/18 Javascript
微信小程序实现页面监听自定义组件的触发事件
2020/11/01 Javascript
解决vue页面刷新,数据丢失的问题
2020/11/24 Vue.js
[03:24]DOTA2超级联赛专访hao 大翻盘就是逆袭
2013/05/24 DOTA
在Python下进行UDP网络编程的教程
2015/04/29 Python
python 实现12bit灰度图像映射到8bit显示的方法
2019/07/08 Python
python爬取2021猫眼票房字体加密实例
2021/02/19 Python
HTML5中使用json对象的实例代码
2018/09/10 HTML / CSS
Strawberrynet草莓网新加坡站:护肤、彩妆、香水及美发产品
2018/08/31 全球购物
Juicy Couture Beauty官方网站:香水和化妆品
2019/03/12 全球购物
Cult Gaia官网:美国生活方式品牌
2019/08/16 全球购物
学校安全检查制度
2014/01/27 职场文书
新农村建设标语
2014/06/24 职场文书
运动会演讲稿100字
2014/08/25 职场文书
追悼会悼词大全
2015/06/23 职场文书
安全教育日主题班会
2015/08/13 职场文书
使用nginx动态转换图片大小生成缩略图
2021/03/31 Servers
SpringBoot工程下使用OpenFeign的坑及解决
2021/07/02 Java/Android
Node-Red实现MySQL数据库连接的方法
2021/08/07 MySQL