Communication between two gnome-terminal sessions

大憨熊 提交于 2019-12-02 23:37:02

问题


I have python program main.py

import subprocess

p = subprocess.Popen(
  "/usr/bin/gnome-terminal -x 'handler.py'", 
  shell = True, stdin = subprocess.PIPE, stdout = subprocess.PIPE)
p.stdin.write('Text sent to handler for display\n')

where handler.py is

#!/usr/bin/python
print "In handler..."

Program main.py opens a new gnome-terminal and runs handler.py to display "In handler...". How can I get handler.py to receive and print "Text sent to the handler for display" sent from main.py?

The answer provided to question "Sending strings between python scripts" is the idea of what I'm after, where handler.py runs in the terminal session created by main.py.


回答1:


You could change your handler to read from a file given at the command line instead of stdin:

#!/usr/bin/env python
import shutil
import sys
import time

print "In handler..."
with open(sys.argv[1], 'rb') as file:
    shutil.copyfileobj(file, sys.stdout)
sys.stdout.flush()
time.sleep(5)

Then you could create a named pipe in main.py, to send the data:

#!/usr/bin/env python
import os
from subprocess import Popen

fifo = "fifo"
os.mkfifo(fifo)
p = Popen(["gnome-terminal", "-x", "python", "handler.py", fifo])
with open(fifo, 'wb') as file:
    file.write("Text sent to handler for display")
os.remove(fifo)
p.wait()


来源:https://stackoverflow.com/questions/20725343/communication-between-two-gnome-terminal-sessions

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!