2010-05-14 74 views
3

我有一些问题让Pipe.send在此代码中工作。我最终想做的是在外部进程运行时发送和接收消息。这最终将被整合到一个与解释程序进程交谈的环节中。通过多处理发送和接收异步.Pipe()in Python

from multiprocessing import Process, Pipe 
from pexpect import spawn 


class CockProc(Process): 

    def start(self): 
     self.process = spawn('coqtop', ['-emacs-U']) 

    def run(self, conn): 
     while True: 
      if not conn.poll(): 
       cmd = conn.recv() 
       self.process.send(cmd) 
      self.process.expect('\<\/prompt\>') 
      result = self.process.before + self.process.after + " " 
      conn.send(result) 


q, p = Pipe() 

proc = CockProc() 
proc.start() 
proc.run(p) 
res = q.recv() 
command = raw_input(res + " ") 

q.send(command) 
res = q.recv() 
parent_conn.send('OHHAI') 
p.join() 
    ` 

回答

1

这可行,但可能需要更多的工作。不知道有多少我可以创建和循环。

from multiprocessing import Process, Pipe 
from pexpect import spawn 


class CockProc(Process): 

    def start(self): 
     self.process = spawn('coqtop', ['-emacs-U']) 

    def run(self, conn): 
     if conn.poll(): 
      cmd = conn.recv() 
      self.process.send(cmd + "\n") 
      print "sent comm" 
     self.process.expect('\<\/prompt\>') 
     result = self.process.before + self.process.after + " " 
     conn.send(result) 

here, there = Pipe(duplex=True) 

proc = CockProc() 
proc.start() 
proc.run(there) 

while True: 
    if here.poll(): 
     res = here.recv() 
     command = raw_input(res + " ") 
     here.send(command) 
    proc.run(there) 
+0

+1谢谢我有这个问题,我挂在.poll()上, – John 2012-02-04 03:01:54