实时获取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中删除文件的程序代码
Mar 13 Python
详解Python中的日志模块logging
Jun 19 Python
python使用xlrd与xlwt对excel的读写和格式设定
Jan 21 Python
python实现AES加密解密
Mar 28 Python
PyQt5实现QLineEdit添加clicked信号的方法
Jun 25 Python
python中count函数简单用法
Jan 05 Python
详解Python修复遥感影像条带的两种方式
Feb 23 Python
python烟花效果的代码实例
Feb 25 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
May 16 Python
使用Keras建立模型并训练等一系列操作方式
Jul 02 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
Sep 04 Python
python中sqllite插入numpy数组到数据库的实现方法
Jun 21 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递归获取目录内文件(包含子目录)封装类分享
2013/12/25 PHP
PHP检测字符串是否为UTF8编码的常用方法
2014/11/21 PHP
php微信支付之APP支付方法
2015/03/04 PHP
php技术实现加载字体并保存成图片
2015/07/27 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
作为PHP程序员你要知道的另外一种日志
2018/07/30 PHP
JQuery live函数
2010/12/24 Javascript
获取offsetTop和offsetLeft值的js代码(兼容)
2013/04/16 Javascript
利用JavaScript检测CPU使用率自己写的
2014/03/22 Javascript
Js与Jq获取浏览器和对象值的方法
2016/03/18 Javascript
微信小程序 教程之条件渲染
2016/10/18 Javascript
微信小程序 网络API 上传、下载详解
2016/11/09 Javascript
js实现城市级联菜单的2种方法
2017/06/23 Javascript
webpack 插件html-webpack-plugin的具体使用
2018/04/09 Javascript
微信小程序使用swiper组件实现层叠轮播图
2018/11/04 Javascript
JS面向对象之单选框实现
2020/01/17 Javascript
[01:15:15]VG VS EG Supermajor小组赛B组胜者组第一轮 BO3第二场 6.2
2018/06/03 DOTA
[41:13]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第一场 11.20
2020/11/20 DOTA
python求pi的方法
2014/10/08 Python
python统计cpu利用率的方法
2015/06/02 Python
基于python神经卷积网络的人脸识别
2018/05/24 Python
Python面向对象思想与应用入门教程【类与对象】
2019/04/12 Python
Python中查看变量的类型内存地址所占字节的大小
2019/06/26 Python
用python求一重积分和二重积分的例子
2019/12/06 Python
python同义词替换的实现(jieba分词)
2020/01/21 Python
python的setattr函数实例用法
2020/12/16 Python
Myprotein加拿大官网:欧洲第一的运动营养品牌
2018/01/06 全球购物
计算机专业自我鉴定
2013/10/15 职场文书
饲料采购员岗位职责
2013/12/19 职场文书
五一家具促销方案
2014/01/10 职场文书
接受捐赠答谢词
2014/01/27 职场文书
公司营业员的自我评价
2014/03/04 职场文书
群众路线问题查摆对照检查材料
2014/10/04 职场文书
老公保证书怎么写
2015/02/26 职场文书
MySQL学习总结-基础架构概述
2021/04/05 MySQL
解决Golang中ResponseWriter的一个坑
2021/04/27 Golang