实时获取Python的print输出流方法


Posted in Python onJanuary 07, 2019

我的应用场景是:使用shell执行python文件,并且通过调用的返回值获取python的标准输出流。

shell程序如下:

cmd='python '$1' '$2' '$3' '$5' '$4
RESULT=eval $cmd
echo $RESULT

之前我的写的python程序如下:

# coding: utf-8
import time
import json

def execute(_database, _parameter):
  print 'sleep start'
  sleepTime = 30
  print 'sleep ' , sleepTime , 'second.'
  time.sleep(sleepTime)
  print 'sleep done'
  testDic={'doneCode':0,'doneMsg':'Done','logList':'success'}
  return json.dumps(testDic, ensure_ascii=False)

if __name__ == "__main__":
  p = 'param'
  db = 'databsae'
  result = execute(db, p)
  print result

之后遇到的问题是shell不能实时的获取python的print流,也就是说不是获取第一条print语句之后,休眠了30秒之后才获取最后一条print语句。

所有的print流在shell中都是一次性获取的,这种情况对于执行时间比较短的程序脚本没什么影响,但是当python程序需要执行很长时间,而需要通过print流追踪程序,就影响比较大。

通过查阅资料,可知:

当我们在 Python 中打印对象调用 print obj 时候,事实上是调用了 sys.stdout.write(obj+'\n')

print 将你需要的内容打印到了控制台,然后追加了一个换行符

print 会调用 sys.stdout 的 write 方法

以下两行在事实上等价:

sys.stdout.write('hello'+'\n')
print 'hello'

调用sys.stdout.flush()强制其“缓冲,这意味着它会写的一切在缓冲区到终端,即使通常会在这样做之前等待。

改动后程序如下:

# coding: utf-8
import time
import json
import sys
def execute(_database, _parameter):
  print 'time 1:',time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
  print 'sleep start.'
  for i in range(1,10):
    print 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:',i
    print 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb:',i*i
    print 'ccccccccccccccccccccccccccccccccccccccccccccccccccccccc:',i+i
    sys.stdout.flush()
    time.sleep(10)
  print 'sleep end '
  print 'time 2:',time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
  testDic={'doneCode':0,'doneMsg':'Done','logList':'success'}
  return json.dumps(testDic, ensure_ascii=False)

if __name__ == "__main__":
  p = 'param'
  db = 'database'
  result = execute(db, p)
  print result

以上这篇实时获取Python的print输出流方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
web.py中调用文件夹内模板的方法
Aug 26 Python
CentOS中使用virtualenv搭建python3环境
Jun 08 Python
python查看FTP是否能连接成功的方法
Jul 30 Python
Python网络爬虫实例讲解
Apr 28 Python
使用Python对SQLite数据库操作
Apr 06 Python
python数据封装json格式数据
Mar 04 Python
Python 实现在文件中的每一行添加一个逗号
Apr 29 Python
python消费kafka数据批量插入到es的方法
Dec 27 Python
python实现Oracle查询分组的方法示例
Apr 30 Python
浅谈django不使用restframework自定义接口与使用的区别
Jul 15 Python
Python 发送邮件方法总结
Aug 10 Python
Pyqt5将多个类组合在一个界面显示的完整示例
Sep 04 Python
Python 运行 shell 获取输出结果的实例
Jan 07 #Python
在python 中实现运行多条shell命令
Jan 07 #Python
Python之使用adb shell命令启动应用的方法详解
Jan 07 #Python
python 对多个csv文件分别进行处理的方法
Jan 07 #Python
python 同时运行多个程序的实例
Jan 07 #Python
python实现将多个文件分配到多个文件夹的方法
Jan 07 #Python
在python中使用with打开多个文件的方法
Jan 07 #Python
You might like
用PHP和MySQL保存和输出图片
2006/10/09 PHP
Session的工作方式
2006/10/09 PHP
从PHP $_SERVER相关参数判断是否支持Rewrite模块
2013/09/26 PHP
php加密算法之实现可逆加密算法和解密分享
2014/01/21 PHP
自己写了一个php检测文件编码的函数
2014/04/21 PHP
php生成RSS订阅的方法
2015/02/13 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
2015/11/04 PHP
PHP Cookei记录用户历史浏览信息的代码
2016/02/03 PHP
php文件包含目录配置open_basedir的使用与性能详解
2017/04/03 PHP
lnmp安装多版本PHP共存的方法详解
2018/08/02 PHP
newxtree.js代码
2007/03/13 Javascript
分析Node.js connect ECONNREFUSED错误
2013/04/09 Javascript
js判断选择时间不能小于当前时间的示例代码
2013/09/24 Javascript
常见表单重复提交问题整理及解决方法
2013/11/13 Javascript
js转化毫秒为时间格式代码
2014/04/10 Javascript
js 数组去重的四种实用方法
2014/09/09 Javascript
异步JavaScript编程中的Promise使用方法
2015/07/28 Javascript
JS拖动鼠标画出方框实现鼠标选区的方法
2015/08/05 Javascript
关于原生js中bind函数的简单实现
2016/08/10 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
2016/08/17 Javascript
vue.js绑定class和style样式(6)
2016/12/09 Javascript
Vuejs学习笔记之使用指令v-model完成表单的数据双向绑定
2019/04/29 Javascript
vue组件添加事件@click.native操作
2020/10/30 Javascript
JavaScript实现消消乐的源代码
2021/01/12 Javascript
Python中动态检测编码chardet的使用教程
2017/07/06 Python
Python基于matplotlib绘制栈式直方图的方法示例
2017/08/09 Python
Python爬虫包BeautifulSoup实例(三)
2018/06/17 Python
美国专业汽车音响和移动电子产品零售商:Car Toys
2019/05/13 全球购物
应聘教师自荐信
2013/10/12 职场文书
医药代表个人的求职信分享
2013/12/08 职场文书
污水厂厂长岗位职责
2014/01/04 职场文书
2016年会开场白台词
2015/06/01 职场文书
单位更名证明
2015/06/18 职场文书
eval(cmd)与eval($cmd)的区别与联系
2021/07/07 PHP
在Spring-Boot中如何使用@Value注解注入集合类
2021/08/02 Java/Android
分析SQL窗口函数之取值窗口函数
2022/04/21 Oracle