实时获取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 相关文章推荐
django通过ajax发起请求返回JSON格式数据的方法
Jun 04 Python
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
Aug 31 Python
利用python编写一个图片主色转换的脚本
Dec 07 Python
Python程序退出方式小结
Dec 09 Python
基于Python的文件类型和字符串详解
Dec 21 Python
Python Django框架单元测试之文件上传测试示例
May 17 Python
python正则爬取某段子网站前20页段子(request库)过程解析
Aug 10 Python
18个Python脚本可加速你的编码速度(提示和技巧)
Oct 17 Python
Pytorch实现各种2d卷积示例
Dec 30 Python
关于Theano和Tensorflow多GPU使用问题
Jun 19 Python
python3定位并识别图片验证码实现自动登录功能
Jan 29 Python
怎么用Python识别手势数字
Jun 07 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和主机名、及mac地址完整实例
2014/07/18 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
2016/03/17 PHP
PHP入门教程之面向对象基本概念实例分析
2016/09/11 PHP
10个实用的脚本代码工具
2010/05/04 Javascript
juqery 学习之五 文档处理 插入
2011/02/11 Javascript
js的参数有长度限制吗?发现不能超过2083个字符
2014/04/20 Javascript
JavaScript AJAX之惰性载入函数
2014/08/27 Javascript
javascript实现倒计时(精确到秒)
2015/06/26 Javascript
jQuery下拉美化搜索表单效果代码分享
2015/08/25 Javascript
怎么限制input的text里输入的值只能是数字(正则、js)
2016/05/16 Javascript
一个简易时钟效果js实现代码
2020/03/25 Javascript
bootstrap日期插件daterangepicker使用详解
2017/10/19 Javascript
vue框架下部署上线后刷新报404问题的解决方案(推荐)
2019/04/03 Javascript
vue基于viewer实现的图片查看器功能
2019/04/12 Javascript
[01:50]WODOTA制作 DOTA2中文宣传片《HERO》
2013/04/28 DOTA
django开发教程之利用缓存文件进行页面缓存的方法
2017/11/10 Python
django允许外部访问的实例讲解
2018/05/14 Python
浅析Python函数式编程
2018/10/06 Python
Django框架首页和登录页分离操作示例
2019/05/28 Python
pytorch中图像的数据格式实例
2020/02/11 Python
django为Form生成的label标签添加class方式
2020/05/20 Python
Python迭代器协议及for循环工作机制详解
2020/07/14 Python
python字典按照value排序方法
2020/12/28 Python
使用canvas绘制贝塞尔曲线
2014/12/17 HTML / CSS
香港百佳网上超级市场:PARKNSHOP.com
2020/06/10 全球购物
JAVA代码查错题
2014/10/10 面试题
编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的
2015/07/23 面试题
中职应届生会计求职信
2013/10/23 职场文书
四个太阳教学反思
2014/02/01 职场文书
信息总监管理职责范本
2014/03/08 职场文书
史学专业毕业生求职信
2014/05/09 职场文书
奖励通知
2015/04/22 职场文书
2015年公务员转正工作总结
2015/04/24 职场文书
党员电教片《信仰》心得体会
2016/01/15 职场文书
高中生物教学反思
2016/02/20 职场文书
Python用any()函数检查字符串中的字母以及如何使用all()函数
2022/04/14 Python