Использование подпроцесса Python для отображения вывода в новом окне Xterm - PullRequest
2 голосов
/ 06 апреля 2011

Я пытаюсь вывести разную информацию на двух терминалах из одного и того же скрипта Python (очень похоже на этот сотрудник ). Способ, на который, как мне показалось, указывает мое исследование, - это открыть новое окно xterm, используя subprocess.Popen и работающий cat, чтобы отобразить stdin терминала в окне. Затем я бы записал необходимую информацию в стандартный поток подпроцесса следующим образом:

from subprocess import Popen, PIPE

terminal = Popen(['xterm', '-e', 'cat'], stdin=PIPE) #Or cat > /dev/null
terminal.stdin.write("Information".encode())

Строка «Информация» будет отображаться в новом xterm. Однако, это не так. Xterm ничего не отображает, а метод stdin.write просто возвращает длину строки и затем перемещается дальше. Я не уверен, что существует неправильное понимание того, как работают подпроцесс и конвейеры, но если кто-нибудь сможет мне помочь, это будет высоко оценено. Благодарю.

1 Ответ

2 голосов
/ 06 апреля 2011

Это не работает, потому что вы передаете материал 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)
...