Python &引用;“打印”;重定向到其他应用程序时不工作

Python &引用;“打印”;重定向到其他应用程序时不工作,python,windows,redirect,printing,stdout,Python,Windows,Redirect,Printing,Stdout,我在重定向python应用程序的输出时遇到了这个奇怪的问题。我正在运行bitmessage,它将大量内容打印到控制台 我试着用我写的应用程序过滤掉一些行。当我将输出重定向到一个文件python.exe src\bitmessagemain.py>file.txt时,它工作正常,所有内容都发送到文本文件。当我将输出导入另一个应用程序python.exe src\bitmessagemain.py | someapp.exe时,似乎忽略了所有“print”语句。它们不会被重定向,也不会通过管道传输到

我在重定向python应用程序的输出时遇到了这个奇怪的问题。我正在运行bitmessage,它将大量内容打印到控制台

我试着用我写的应用程序过滤掉一些行。当我将输出重定向到一个文件
python.exe src\bitmessagemain.py>file.txt时,它工作正常,所有内容都发送到文本文件。当我将输出导入另一个应用程序
python.exe src\bitmessagemain.py | someapp.exe
时,似乎忽略了所有“print”语句。它们不会被重定向,也不会通过管道传输到其他应用程序

当使用“more”和“type CON”等系统内部命令时,重定向甚至不起作用


有人知道如何解决这个问题吗?

所以我通过实验找到了答案。似乎提供命令行开关
-u
可以通过将输出设置为无缓冲二进制模式来解决问题。文件:

我不知道有什么副作用,但似乎完全有效


出于某种原因,输出缓冲区远远大于可视控制台区域的大小。我以无休止的循环打印文本,当我打印大约半GB(!)时,输出被刷新。这只有在使用重定向时才能完成。可能是为了优化性能。

我想知道Windows是否支持Unix风格的管道。是吗?@LutzHorn它应该是:
python-c“打印('test')”|更多
工作吗?@eryksun是的,它工作因为
more.com
是外部的,python方面可能没有什么问题。someapp.exe可能直接从控制台读取,或者在检测到stdin不是控制台输入时更改其行为。Python的
print
语句/函数不会在每次写入后刷新文件缓冲区,这就是为什么无缓冲模式可以解决问题的原因。通常,需要缓冲区以较少的系统调用优化写入数据,管道另一端的读取过程检测到stdin不能交互以适应处理缓冲I/O。您还需要描述完整的问题,以明确您要做什么,以及为什么管道的另一端存在默认缓冲问题。使用无缓冲IO的更好方法是
sys.stdout.flush()