我想管道[编辑:实时文本]几个子进程的输出(有时是链接的,有时是并行的)到单个终端/ tty窗口,它不是活动的python shell(可以是IDE,命令行) ,或使用tkinter的运行脚本)。 IPython不是一个选择。我需要标准安装附带的东西。喜欢与操作系统无关的解决方案,但需要在XP / Vista上运行。
如果你愿意,我会发布我已尝试过的内容,但这很令人尴尬。
答案 0 :(得分:2)
Unix中的一个很好的解决方案是命名管道。我知道你问过Windows,但在Windows中可能有类似的方法,或者这可能对其他人有帮助。
终端1上的:
mkfifo /tmp/display_data
myapp >> /tmp/display_data
终端2(bash)上的:
tail -f /tmp/display_data
编辑:更改了终端2命令,使用“tail -f”而不是无限循环。
答案 1 :(得分:0)
你说“管道”所以我假设你正在处理子进程的文本输出。一个简单的解决方案可能就是将输出写入文件?
e.g。在子流程中:
%TEMP%\output.txt
output.txt
复制到主进程正在观看的目录中。在主要过程中:
您可以在输出文件名中对子进程名称进行编码,以便了解如何处理它。
答案 2 :(得分:0)
你可以创建一个生产者 - 客户系统,在这里通过套接字插入行(这里没什么特别的)。 客户将是一个多线程套接字服务器,用于监听连接并将所有行放入 Queue 。在单独的线程中,它将从队列中获取项目并将其打印在控制台上。该程序可以作为外部工具从cmd控制台或eclipse控制台运行,没有太多麻烦。
从您的角度来看,它应该是实时的。作为奖励,您可以将生产者和客户放在不同的盒子上。生产者甚至可以组成一个网络。
可以找到一些使用python进行套接字编程的示例here。查看here获取tcp echoserver示例,查看here获取tcp“hello world”套接字客户端。
还有一个Windows扩展,可以使用命名管道。
在linux上(可能是cygwin?)你可以 tail -f named-fifo 。
祝你好运!