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

How to write to the STDIN of another Python process?

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

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

然后,在代码的其他部分,它会继续监听其 STDIN

此过程输出以下内容:

Process id: 3824

我想从另一个 Python 进程写入上述进程的 STDIN,给定其 PID

我的问题是:我需要从第二个过程中执行什么代码?

我正在使用 Windows

程序只能重定向它创建的进程的标准输入和输出("child processes")。要使用标准输出与另一个进程对话,该进程必须已经在听你说话。

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

您需要的是命名管道,它基本上是一个类似文件的对象,您可以从中写入和读取,并充当进程之间的桥梁。不幸的是,python 在 Windows 上似乎没有 "native" 支持。为此,您需要 python for windows extension

或者,您可以使用 socket

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

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']"