实时获取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下载懒人图库JavaScript特效
May 28 Python
python中不能连接超时的问题及解决方法
Jun 10 Python
python实现Virginia无密钥解密
Mar 20 Python
基于django channel实现websocket的聊天室的方法示例
Apr 11 Python
python3.6根据m3u8下载mp4视频
Jun 17 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
Jul 07 Python
python字典排序的方法
Oct 12 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
Feb 03 Python
Python enumerate() 函数如何实现索引功能
Jun 29 Python
python通过cython加密代码
Dec 11 Python
python如何发送带有附件、正文为HTML的邮件
Feb 27 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
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
2009/06/08 PHP
Yii框架关联查询with用法分析
2014/12/02 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
2015/05/13 PHP
ThinkPHP使用getlist方法实现数据搜索功能示例
2017/05/08 PHP
php面试实现反射注入的详细方法
2019/09/30 PHP
将HTML自动转为JS代码
2006/06/26 Javascript
js类后台管理菜单类-MenuSwitch
2007/09/12 Javascript
jquery Firefox3.5中操作select的问题
2009/07/10 Javascript
JavaScript中各种编码解码函数的区别和注意事项
2010/08/19 Javascript
Javascript加载速度慢的解决方案
2014/03/11 Javascript
JavaScript实现从数组中选出和等于固定值的n个数
2014/09/03 Javascript
js数组的操作指南
2014/12/28 Javascript
jQuery插件Zclip实现完美兼容个浏览器点击复制内容到剪贴板
2015/04/30 Javascript
快速掌握jQuery插件WebUploader文件上传
2016/11/07 Javascript
Extjs表单输入框异步校验的插件实现方法
2017/03/20 Javascript
react native仿微信PopupWindow效果的实例代码
2017/08/07 Javascript
js监听html页面的上下滚动事件方法
2018/09/11 Javascript
create-react-app使用antd按需加载的样式无效问题的解决
2019/02/26 Javascript
JavaScript中变量提升机制示例详解
2019/12/27 Javascript
Vue ElementUI实现:限制输入框只能输入正整数的问题
2020/07/31 Javascript
python获取豆瓣电影简介代码分享
2014/01/16 Python
python3爬虫之设计签名小程序
2018/06/19 Python
详解Python 装饰器执行顺序迷思
2018/08/08 Python
利用Python对文件夹下图片数据进行批量改名的代码实例
2019/02/21 Python
Python实现蒙特卡洛算法小实验过程详解
2019/07/12 Python
Python基于xlutils修改表格内容过程解析
2020/07/28 Python
HTML5标签小集
2011/08/02 HTML / CSS
Shell编程面试题
2012/05/30 面试题
财务会计专业应届毕业生求职信
2013/10/18 职场文书
信息专业个人的自我评价
2013/12/27 职场文书
服装设计专业毕业生求职信
2014/04/09 职场文书
学校督导评估方案
2014/06/10 职场文书
初中地理教学反思
2016/02/19 职场文书
导游词之天津盘山
2019/11/01 职场文书
浅谈怎么给Python添加类型标注
2021/06/08 Python
V Rising 服务器搭建图文教程
2022/06/16 Servers