广告
返回顶部
首页 > 资讯 > 后端开发 > Python >实时获取Python的print输出流
  • 129
分享到

实时获取Python的print输出流

实时Pythonprint 2023-01-31 06:01:09 129人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

我的应用场景是:使用shell执行python文件,并且通过调用的返回值获取Python的标准输出流。 shell程序如下: cmd='python '$1' '$2' '$3' '$5' '$4 RESULT=eval $cm

我的应用场景是:使用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

--结束END--

本文标题: 实时获取Python的print输出流

本文链接: https://www.lsjlt.com/news/189955.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作