zee*_*han 7 python unix stdout io-redirection
我有一个Python程序,其中我有一些Print语句,然后调用一些c ++可执行文件,我也从中获得一些输出到stdout.当我在unix终端中运行这个python脚本时,我按预期在屏幕上输出(按照正确的顺序,即首先从打印然后从c ++可执行文件中输出).问题是当我将此输出重定向到像这样的文件
python test.py > out.txt
Run Code Online (Sandbox Code Playgroud)
我输出的顺序错误.我首先获得c ++可执行文件的输出,然后获得另一个.
小智 5
当 stdout 是 tty 设备时,Python 使用行缓冲,因此输出按照打印语句顺序。在重定向的情况下,python 会缓冲打印语句的输出。虽然在这两种情况下 python 都不处理 c++ 可执行输出缓冲。因此,当输出被重定向时,打印语句会被缓冲并且不会输出到文件,直到缓冲区已满或程序结束。
sys.stdout.flush()将刷新打印语句的输出,如下所示。注意它应该遵循打印语句
#!/usr/local/bin/python
import os
import sys
print("Hello1")
print("Hello2")
sys.stdout.flush()
os.system("/python/cppprog.o")
print("Bye1")
print("Bye2")
Run Code Online (Sandbox Code Playgroud)
输出:
]# python script.py > o.txt
]# cat o.txt
Hello1
Hello2
Hello, world!
Bye1
Bye2
Run Code Online (Sandbox Code Playgroud)