如何写入另一个Python进程的STDIN?

时间:2017-08-13 05:55:50

标签: python python-2.7 process stdout stdin

我有一个 Python 程序,该代码包含以下片段:

def Main():
    pid = os.getpid()
    print 'Process id: {}'.format(pid)

然后,在代码的其他部分,它一直在监听 STDIN

此过程输出以下内容:

Process id: 3824

从另一个Python进程我想写给上面进程的 STDIN 给出 PID

我的问题是:我需要从第二个流程执行哪些代码?

我正在使用 Windows

2 个答案:

答案 0 :(得分:1)

程序只能重定向它创建的进程的标准输入和输出(“子进程”)。要使用标准输出与另一个进程通信,该进程必须已经在监听您。

操作系统控制进程的文件描述符所引用的内容。也就是说,进程的stdin将由os和执行程序的上下文决定。要允许进程间通信,您可以查看操作系统为此提供的功能,例如using a shell script and the piping operator

你想要的是一个命名管道,它基本上是一个类似文件的对象,你可以写入和读取它,并作为进程之间的桥梁。不幸的是,python似乎没有Windows上的“原生”支持。你需要python for windows extension

或者,您可以使用socket

答案 1 :(得分:0)

使用Queue在进程之间进行通信,而不是写入STDIN     来自多处理导入过程,队列

def f(q):
    q.put([42, None, 'hello'])

q = Queue()
p1 = Process(target=f, args=(q,))
p1 = Process(target=f, args=(q,))
# start and join

在另一个过程中

print(q.get())    # prints "[42, None, 'hello']"