实时获取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 相关文章推荐
浅谈python中的__init__、__new__和__call__方法
Jul 18 Python
Python PyQt5标准对话框用法示例
Aug 23 Python
django 常用orm操作详解
Sep 13 Python
K-means聚类算法介绍与利用python实现的代码示例
Nov 13 Python
Python绘制3d螺旋曲线图实例代码
Dec 20 Python
Python基于辗转相除法求解最大公约数的方法示例
Apr 04 Python
Python加载带有注释的Json文件实例
May 23 Python
详解python中的json和字典dict
Jun 22 Python
pandas重新生成索引的方法
Nov 06 Python
python多线程并发让两个LED同时亮的方法
Feb 18 Python
Python如何安装第三方模块
May 28 Python
Python必备技巧之字符数据操作详解
Mar 23 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
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
2009/05/28 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
laravel 之 Eloquent 模型修改器和序列化示例
2019/10/17 PHP
JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)
2012/04/07 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
jQuery scroll事件实现监控滚动条分页示例
2014/04/04 Javascript
项目中常用的JS方法整理
2015/01/30 Javascript
JavaScript返回0-1之间随机数的方法
2015/04/06 Javascript
js实现时间显示几天前、几小时前或者几分钟前的方法集锦
2015/05/29 Javascript
js判断浏览器是否支持严格模式的方法
2016/10/04 Javascript
jQuery点击导航栏选中更换样式的实现代码
2017/01/23 Javascript
angularjs ui-router中路由的二级嵌套
2017/03/10 Javascript
AngularJS 教程及实例代码
2017/10/23 Javascript
详解extract-text-webpack-plugin 的使用及安装
2018/06/12 Javascript
React 源码中的依赖注入方法
2018/11/07 Javascript
javascript将扁平的数据转为树形结构的高效率算法
2020/02/27 Javascript
[02:56]《DAC最前线》之国外战队抵达上海备战亚洲邀请赛
2015/01/28 DOTA
[01:04:48]VGJ.S vs TNC Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
python 连接各类主流数据库的实例代码
2018/01/30 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
2018/08/07 Python
Python中创建二维数组
2018/10/17 Python
Python中的取模运算方法
2018/11/10 Python
Python 实现数据结构-循环队列的操作方法
2019/07/17 Python
使用Python操作ArangoDB的方法步骤
2020/02/02 Python
python 模块导入问题汇总
2021/02/01 Python
CSS3 transform的skew属性值图文详解
2014/07/21 HTML / CSS
HTML5自定义视频播放器源码
2020/01/06 HTML / CSS
Snapfish英国:在线照片打印和个性化照片礼品
2017/01/13 全球购物
求职信模版
2013/11/30 职场文书
30岁生日感言
2014/01/25 职场文书
运动会闭幕式解说词
2014/02/21 职场文书
党员志愿者活动总结
2014/06/26 职场文书
2015年化验室工作总结
2015/04/23 职场文书
2016拓展训练心得体会范文
2016/01/12 职场文书
SQLServer2008提示评估期已过解决方案
2021/04/12 SQL Server
GTX1660显卡搭配显示器推荐
2022/04/19 数码科技