2017-08-13 37 views
0

我有一个的Python程序,代码包含以下片段:如何写入另一个Python进程的STDIN?

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

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

该过程输出如下:

Process id: 3824 

从另一个Python过程我想要上面给出其PID写入过程的STDIN

我的问题是:我需要从第二个过程中做什么代码?我正在使用Windows

+0

https://docs.python.org/3 /library/ipc.html –

+0

@cᴏʟᴅsᴘᴇᴇᴅ,你可以更具体一点吗?,谢谢 – Angel

+0

看看子进程模块和控制子进程输入和输出的方法。然后问一个更精确的问题。 –

回答

1

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

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

你想要的是一个命名管道,它基本上是一个类似文件的对象,你可以从中读取和读取文件,也可以充当进程之间的桥梁。不幸的是,python在Windows上似乎没有“本机”支持。你需要这个python for windows extension。可以使用socket

+0

命名管道通过'connection.Listener'和'connection.Client'由[multiprocessing module](https://docs.python.org/3/library/multiprocessing.html#module-multiprocessing.connection)支持。多处理中的其他函数隐式使用命名管道,但这些功能可让您明确设置名称/地址,例如'R'\\。\ PIPE \ spam''。 – eryksun

+0

回答提出的问题涉及到调用'AttachConsole'和'WriteConsoleInput',假设该进程正在使用控制台进行标准输入。但是,这不是一种正常的方法,特别是如果您控制了服务器和客户端的源代码。 – eryksun

0

相反写入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']" 
相关问题