有没有办法从当前正在执行的python程序逐行输出管道?
将 python脚本的打印输出传递给像grep这样的命令时,脚本的输出似乎只能在完成整个脚本后通过管道连接到后续命令. 例如,在脚本test_grep.py中,如下所示: #!/usr/bin/env python from time import sleep print "message1" sleep(5) print "message2" sleep(5) print "message3" 用./test_grep.py |调用时grep消息,10秒内不会出现任何内容,此时将显示所有三行. 将其与脚本test_grep.sh进行比较: #!/usr/bin/env bash echo "message1" sleep 5 echo "message2" sleep 5 echo "message3" ./test_grep.sh | grep消息将立即输出message1,然后由message2和message3以5秒的间隔输出. 我希望这是因为只有python解释器完成执行后才能获得下一个命令的输出.有没有办法改变这种行为? 解决方法你能行的:>通过刷新python中的每个打印件 你甚至可以调用python -u来禁用缓冲. 我会选择行缓冲选项,因为它看起来最自然. open(file,mode='r',buffering=-1 ....)
当你没有指定缓冲(典型的“打开”)时,如果它检测到输出直接执行TTY,即屏幕控制台,它将使用行缓冲.如果管道输出或将其重定向到文件,它将切换回大(4K / 8K)缓冲区.
您可以通过sys.stdout = os.fdopen(sys.stdout.fileno(),’w’,1)重新打开stdout. (编辑:岳阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 在Python的PIL中,如何更改图像的质量?
- python – ‘AnonymousUser’对象没有属性’后端’
- python – 使用随机长度的块生成1d numpy
- 什么是SNAP for python
- python – 带有runserver的Unicodedecodeerror
- 如何将intersphinx与特定于django的结构(如设置)相关联?
- python – 在大熊猫中合并多索引的单索引数据帧
- python – 如何在django的每个视图中运行一段代码?
- python – SQLAlchemy过滤器查询由相关对象
- linux 2.6升级Python2.7 ./configure 报错问题