使用Python的子进程在新的Xterm窗口中显示输出
问题内容:
我正在尝试从同一个Python脚本的两个终端中输出不同的信息(很像这个家伙)。我的研究似乎指向的方式是使用subprocess.Popen并运行cat在窗口中显示终端的标准输入来打开新的xterm窗口。然后,我将必要的信息写入子进程的stdin中,如下所示:
from subprocess import Popen, PIPE
terminal = Popen(['xterm', '-e', 'cat'], stdin=PIPE) #Or cat > /dev/null
terminal.stdin.write("Information".encode())
然后,字符串“
Information”将显示在新的xterm中。然而,这种情况并非如此。xterm不显示任何内容,stdin.write方法仅返回字符串的长度,然后继续前进。我不确定子进程和管道的工作方式是否存在误解,但是如果有人可以帮助我,将不胜感激。谢谢。
问题答案:
这是行不通的,因为您将内容通过管道传递到xterm
内部而不是内部运行的程序xterm
。考虑使用命名管道:
import os
from subprocess import Popen, PIPE
import time
PIPE_PATH = "/tmp/my_pipe"
if not os.path.exists(PIPE_PATH):
os.mkfifo(PIPE_PATH)
Popen(['xterm', '-e', 'tail -f %s' % PIPE_PATH])
for _ in range(5):
with open(PIPE_PATH, "w") as p:
p.write("Hello world!\n")
time.sleep(1)