实时获取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 MD5文件生成码
Jan 12 Python
使用Python编写类UNIX系统的命令行工具的教程
Apr 15 Python
python基础教程之Filter使用方法
Jan 17 Python
python 实现在Excel末尾增加新行
May 02 Python
Python应用库大全总结
May 30 Python
Python字典中的键映射多个值的方法(列表或者集合)
Oct 17 Python
对python 判断数字是否小于0的方法详解
Jan 26 Python
Python 实现数据结构-循环队列的操作方法
Jul 17 Python
Django框架创建mysql连接与使用示例
Jul 29 Python
python 两个数据库postgresql对比
Oct 21 Python
pycharm如何实现跨目录调用文件
Feb 28 Python
Python通过m3u8文件下载合并ts视频的操作
Apr 16 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中动态显示签名和ip原理
2007/03/28 PHP
PHP遍历二维数组的代码
2011/04/22 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
2014/11/19 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
2020/02/18 PHP
早该知道的7个JavaScript技巧
2013/03/27 Javascript
基于JQuery实现滚动到页面底端时自动加载更多信息
2014/01/31 Javascript
不要使用jQuery触发原生事件的方法
2014/03/03 Javascript
javascript读写json示例
2014/04/11 Javascript
JS实现黑客帝国文字下落效果
2015/09/01 Javascript
js实现可折叠展开的手风琴菜单效果
2015/09/07 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
AngularJS基础 ng-hide 指令用法及示例代码
2016/08/01 Javascript
Angular中$cacheFactory的作用和用法实例详解
2016/08/19 Javascript
实现JavaScript高性能的数据存储
2016/12/11 Javascript
通过sails和阿里大于实现短信验证
2017/01/04 Javascript
localStorage的黑科技-js和css缓存机制
2017/02/06 Javascript
Angular.js跨controller实现参数传递的两种方法
2017/02/20 Javascript
详解jquery插件jquery.viewport.js学习使用方法
2017/09/08 jQuery
jquery中attr、prop、data区别与用法分析
2019/09/25 jQuery
JQuery使用属性addClass、removeClass和toggleClass实现增加和删除类操作示例
2019/11/18 jQuery
[03:18]DOTA2放量测试专访820:希望玩家加入国服大家庭
2013/08/25 DOTA
Python使用matplotlib绘制随机漫步图
2018/08/27 Python
Python可视化mhd格式和raw格式的医学图像并保存的方法
2019/01/24 Python
75条笑死人的知乎神回复,用60行代码就爬完了
2019/05/06 Python
使用OpenCV实现仿射变换—缩放功能
2019/08/29 Python
css3实例教程 一款纯css3实现的环形导航菜单
2014/10/20 HTML / CSS
法国最大电子商务平台:Cdiscount
2018/03/13 全球购物
冰淇淋店创业计划书范文
2013/12/27 职场文书
黄继光的英雄事迹材料
2014/02/13 职场文书
美术课外活动总结
2014/07/08 职场文书
销售代理协议书
2014/09/30 职场文书
大学生见习报告总结
2014/11/04 职场文书
李白故里导游词
2015/02/12 职场文书
幼儿园六一主持词
2015/06/30 职场文书
让人感觉高大上的讲话稿怎么写?
2019/07/08 职场文书
利用Nginx代理如何解决前端跨域问题详析
2021/04/02 Servers