实时获取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怎么学好python?
Oct 07 Python
python列表操作使用示例分享
Feb 21 Python
python实现360皮肤按钮控件示例
Feb 21 Python
ubuntu系统下 python链接mysql数据库的方法
Jan 09 Python
200 行python 代码实现 2048 游戏
Jan 12 Python
详解tensorflow训练自己的数据集实现CNN图像分类
Feb 07 Python
Python图片转换成矩阵,矩阵数据转换成图片的实例
Jul 02 Python
python 利用for循环 保存多个图像或者文件的实例
Nov 09 Python
Python爬虫爬取煎蛋网图片代码实例
Dec 16 Python
详解Python设计模式之策略模式
Jun 15 Python
通过自学python能找到工作吗
Jun 21 Python
python uuid生成唯一id或str的最简单案例
Jan 13 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
zf框架的db类select查询器join链表使用示例(zend框架)
2014/03/14 PHP
PHP三元运算的2种写法代码实例
2014/05/12 PHP
PHP版微信小店接口开发实例
2016/11/12 PHP
360搜索引擎自动收录php改写方案
2018/04/28 PHP
jQuery 对象中的类数组操作
2009/04/27 Javascript
JQuery UI DatePicker中z-index默认为1的解决办法
2010/09/28 Javascript
jQuery创建自定义的选择器用以选择高度大于100的超链接实例
2015/03/18 Javascript
微信公众号  提示:Unauthorized API function 问题解决方法
2016/12/05 Javascript
详解JavaScript时间处理之几个月前或几个月后的指定日期
2016/12/21 Javascript
js实现带简单弹性运动的导航条
2017/02/22 Javascript
JS组件系列之MVVM组件构建自己的Vue组件
2017/04/28 Javascript
详解使用Typescript开发node.js项目(简单的环境配置)
2017/10/09 Javascript
swiper移动端轮播插件(触碰图片之后停止轮播)
2017/12/28 Javascript
深入浅析JS中的严格模式
2018/06/04 Javascript
微信小程序自定义弹窗wcPop插件
2018/11/19 Javascript
JavaScript 处理树数据结构的方法示例
2019/06/16 Javascript
基于Node.js的大文件分片上传示例
2019/06/19 Javascript
vue实现拖拽的简单案例 不超出可视区域
2019/07/25 Javascript
详细分析Node.js 多进程
2020/06/22 Javascript
python返回昨天日期的方法
2015/05/13 Python
python3+PyQt5+Qt Designer实现扩展对话框
2018/04/20 Python
Python绘制3D图形
2018/05/03 Python
pandas 层次化索引的实现方法
2019/07/06 Python
python是否适合网页编程详解
2019/10/04 Python
PyCharm使用之配置SSH Interpreter的方法步骤
2019/12/26 Python
Python tkinter和exe打包的方法
2020/02/05 Python
硕士研究生个人求职信
2013/12/04 职场文书
关于毕业的中学校园广播稿
2014/01/26 职场文书
优秀小学生家长评语
2014/01/30 职场文书
《学棋》教后反思
2014/04/14 职场文书
班组长安全工作职责
2014/07/15 职场文书
2014年大班保育员工作总结
2014/12/02 职场文书
写给导师的自荐信
2015/03/06 职场文书
2015年国庆节新闻稿
2015/07/18 职场文书
Django使用redis配置缓存的方法
2021/06/01 Redis
教你使用Ubuntu搭建DNS服务器
2022/09/23 Servers