使用Python的Subprocess在新Xterm窗口中显示输出
我想在两个终端上输出不同的信息,但都是用同一个Python脚本来实现(就像这位朋友所做的那样)。我研究后发现,可以通过使用subprocess.Popen打开一个新的xterm窗口,并运行cat命令来显示终端的标准输入(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方法只是返回了字符串的长度,然后就继续往下执行了。我不太确定自己是否对subprocess和管道的工作方式有误解,如果有人能帮我解决这个问题,我将非常感激。谢谢。
1 个回答
4
这个方法不行,因为你是把东西直接传给了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)