对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多线程学习资料
Dec 19 Python
python模块restful使用方法实例
Dec 10 Python
Python中的字符串替换操作示例
Jun 27 Python
python中is与双等于号“==”的区别示例详解
Nov 21 Python
python数据结构学习之实现线性表的顺序
Sep 28 Python
django 将model转换为字典的方法示例
Oct 16 Python
在pytorch中查看可训练参数的例子
Aug 18 Python
Python中sorted()排序与字母大小写的问题
Jan 14 Python
python传到前端的数据,双引号被转义的问题
Apr 03 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
Jun 30 Python
Python threading模块condition原理及运行流程详解
Oct 05 Python
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
May 24 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 MVC
2014/09/10 PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
2017/11/28 PHP
快速解决PHP调用Word组件DCOM权限的问题
2017/12/27 PHP
ThinkPHP3.1.2 使用cli命令行模式运行的方法
2020/04/14 PHP
javascript学习笔记(九) js对象 设计模式
2012/06/19 Javascript
Javascript中valueOf与toString区别浅析
2013/03/19 Javascript
jQuery实现验证年龄简单思路
2016/02/24 Javascript
JS实现Select的option上下移动的方法
2016/03/01 Javascript
表单中单选框添加选项和移除选项
2016/07/04 Javascript
mui上拉加载功能实例详解
2017/04/13 Javascript
初识 Vue.js 中的 *.Vue文件
2017/11/22 Javascript
微信小程序实现弹出菜单
2018/07/19 Javascript
vue+express 构建后台管理系统的示例代码
2018/07/19 Javascript
layui实现table加载的示例代码
2018/08/14 Javascript
vue+iview动态渲染表格详解
2019/03/19 Javascript
js模拟实现百度搜索
2020/06/28 Javascript
vue element 关闭当前tab 跳转到上一路由操作
2020/07/22 Javascript
vue深度监听(监听对象和数组的改变)与立即执行监听实例
2020/09/04 Javascript
Python 统计位数为偶数的数字代码详解
2020/03/15 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
2020/08/17 Python
Python 列表反转显示的四种方法
2020/11/16 Python
纯CSS3实现鼠标悬停提示气泡效果
2014/02/28 HTML / CSS
HTML5的Video标签有部分MP4无法播放的问题解析(多图)
2017/08/18 HTML / CSS
英国手机零售商:Metrofone
2019/03/18 全球购物
新西兰第一的行李箱网站:luggage.co.nz
2019/07/22 全球购物
小米官方旗舰店:Xiaomi
2020/08/07 全球购物
面向对象概念面试题(.NET)
2016/11/04 面试题
廉洁使者实施方案
2014/03/29 职场文书
奠基仪式策划方案
2014/05/15 职场文书
民间借贷协议书范本
2014/10/01 职场文书
银行党员批评与自我批评
2014/10/15 职场文书
2014年防汛工作总结
2014/12/08 职场文书
农业项目合作意向书
2015/05/08 职场文书
2015年社区科普工作总结
2015/05/13 职场文书
立春观后感
2015/06/18 职场文书
优秀志愿者感言
2015/08/01 职场文书