2013-03-09 92 views
0

我想用Python封裝一個遊戲服務器進程,以便我可以使用套接字從其他程序訪問控制檯。我希望能夠讀取stdout,stderr,並能夠將數據發送到stdin以使用套接字與服務器進行通信。使用unix socket進行subprocess stdin,stdout,stderr

到目前爲止,我已經試過這樣的事情:

sock = socket.socket(socket.AF_UNIX) 
sock.setblocking(0) 
sock.bind('server.sock') 
sock.listen(5) 
sock.accept() 
fd = sock.makefile() 

proc = subprocess.Popen(args, stdin=fd, stdout=fd, stderr=fd) 

我可以連接到server.sock Unix套接字,但是當我要求服務器具有輸出沒有數據被讀過。

+0

這看起來不像完整的程序。什麼是參數設置? – 2013-03-09 20:21:20

回答

0

您不能忽略返回值sock.accept():它返回一個元組,其中的第一項是連接的套接字對象。它與sock不同,它的唯一目的是接受(可能有幾個)連接。您需要在此連接的套接字對象上調用makefile()而不是原始的sock

+0

除非有實際的連接請求等待接受,否則按順序使用sock.accept()將不起作用。如何啓動進程以便連接套接字從已經運行的進程開始接收I/O? – TronPaul 2013-03-12 22:09:38

相關問題