如何写入另一个Python进程的STDIN?
我有一个的Python程序,代码包含以下片段:如何写入另一个Python进程的STDIN?
def Main():
pid = os.getpid()
print 'Process id: {}'.format(pid)
然后,在代码的其他部分就一直听其STDIN。
该过程输出如下:
Process id: 3824
从另一个Python过程我想要上面给出其PID写入过程的STDIN。
我的问题是:我需要从第二个过程中做什么代码?我正在使用Windows。
程序只能重定向它创建的进程的标准输入和输出(“子进程”)。要使用标准输出与另一个流程交谈,该流程必须已经在倾听您的意见。
它是控制进程文件描述符引用的操作系统。也就是说,你的进程的stdin
将由os和执行程序的上下文来决定。为了允许进程间通信,您可以查看操作系统为此提供的工具,例如using a shell script and the piping operator。
你想要的是一个命名管道,它基本上是一个类似文件的对象,你可以从中读取和读取文件,也可以充当进程之间的桥梁。不幸的是,python在Windows上似乎没有“本机”支持。你需要这个python for windows extension。可以使用socket。
命名管道通过'connection.Listener'和'connection.Client'由[multiprocessing module](https://docs.python.org/3/library/multiprocessing.html#module-multiprocessing.connection)支持。多处理中的其他函数隐式使用命名管道,但这些功能可让您明确设置名称/地址,例如'R'\\。\ PIPE \ spam''。 – eryksun
回答提出的问题涉及到调用'AttachConsole'和'WriteConsoleInput',假设该进程正在使用控制台进行标准输入。但是,这不是一种正常的方法,特别是如果您控制了服务器和客户端的源代码。 – eryksun
相反写入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']"
https://docs.python.org/3 /library/ipc.html –
@cᴏʟᴅsᴘᴇᴇᴅ,你可以更具体一点吗?,谢谢 – Angel
看看子进程模块和控制子进程输入和输出的方法。然后问一个更精确的问题。 –