我有一个 Python 程序,该代码包含以下片段:
def Main():
pid = os.getpid()
print 'Process id: {}'.format(pid)
然后,在代码的其他部分,它一直在监听 STDIN 。
此过程输出以下内容:
Process id: 3824
从另一个Python进程我想写给上面进程的 STDIN 给出 PID 。
我的问题是:我需要从第二个流程执行哪些代码?
我正在使用 Windows 。
答案 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']"