代码之家  ›  专栏  ›  技术社区  ›  Paul

创建新的终端/外壳窗口以简单地显示文本

  •  1
  • Paul  · 技术社区  · 16 年前

    我想通过管道[edit:real-time text]将几个子进程(有时链接,有时并行)的输出传输到一个不是活动的python shell的终端/tty窗口(无论是IDE、命令行,还是使用tkinter运行的脚本)。IPython不是一个选项。我需要标准安装附带的东西。喜欢操作系统不可知的解决方案,但需要在XP/Vista上工作。

    如果你愿意的话,我会把我已经试过的贴出来,但这很尴尬。

    3 回复  |  直到 16 年前
        1
  •  2
  •   Kyle Simek    16 年前

    在UNIX中,一个好的解决方案是命名管道。我知道你问过关于Windows的问题,但是Windows中可能有类似的方法,或者这对其他人有帮助。

    终端1:

    mkfifo /tmp/display_data
    myapp >> /tmp/display_data
    

    在终端2(bash)上:

    tail -f /tmp/display_data
    

    编辑 : 将终端2命令更改为使用“tail-f”而不是无限循环。

        2
  •  0
  •   John Fouhy    16 年前

    您说“pipe”,所以我假设您正在处理子流程的文本输出。一个简单的解决方案可能只是将输出写入文件?

    例如,在子流程中:

    1. 重定向输出 %TEMP%\output.txt
    2. 退出,复制 output.txt 到你的主要进程正在监视的目录。

    在主要过程中:

    1. 每隔一秒钟,检查目录中是否有新文件。
    2. 找到文件后,处理并删除它们。

    您可以在输出文件名中对子进程名进行编码,以便知道如何处理它。

        3
  •  0
  •   Paweł Polewicz    16 年前

    您可以创建一个生产者-客户系统,在该系统中,行被插入到一个套接字上(这里没有什么特别之处)。 客户将是一个多线程套接字服务器,它监听连接并将所有行放入 Queue . 在单独的线程中,它将从队列中获取项目并在控制台上打印。程序可以作为一个外部工具从命令控制台或Eclipse控制台运行,而不会有太大的麻烦。

    从你的角度来看,它应该是实时的。作为奖励,您可以将生产商和客户放在单独的盒子上。生产商甚至可以组成一个网络。

    可以找到一些使用python进行套接字编程的示例 here . 看 here 对于TCP EchoServer示例和 here 对于TCP“Hello World”套接字客户端。

    还有一个Windows扩展,可以使用命名管道。

    在Linux上(可能是Cygwin?)你可以 F尾命名为FIFO .

    祝你好运!