Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python';在新的Xterm窗口中显示输出的子流程_Python_Pipe_Subprocess - Fatal编程技术网

使用Python';在新的Xterm窗口中显示输出的子流程

使用Python';在新的Xterm窗口中显示输出的子流程,python,pipe,subprocess,Python,Pipe,Subprocess,我试图从同一个Python脚本在两个终端中输出不同的信息(非常类似于)。我的研究似乎指出的方法是使用subprocess.Popen和运行cat打开一个新的xterm窗口,在窗口中显示终端的stdin。然后,我会将必要的信息写入子流程的stdin,如下所示: from subprocess import Popen, PIPE terminal = Popen(['xterm', '-e', 'cat'], stdin=PIPE) #Or cat > /dev/null terminal

我试图从同一个Python脚本在两个终端中输出不同的信息(非常类似于)。我的研究似乎指出的方法是使用subprocess.Popen和运行cat打开一个新的xterm窗口,在窗口中显示终端的stdin。然后,我会将必要的信息写入子流程的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)

谢谢。一件事是,当在脚本中关闭管道之前用于更新终端时,我必须使其p=open(管道路径'w',1)。我如何使用
gnome-terminal
而不是
xterm
?@shiva我稍微编辑了一下答案。有了上面的代码片段,您可以在Popen行中将xterm替换为gnome终端?CMD是****,但可能还有其他窗口终端可以打开并通过管道连接到?