使用unix socket进行子进程stdin,stdout,stderr

时间:2013-03-09 19:53:23

标签: python sockets stdout stdin stderr

我想用Python包装游戏服务器进程,这样我就可以使用套接字从其他程序访问控制台。我希望能够读取stdout,stderr并能够将数据发送到stdin以通过套接字与服务器通信。

到目前为止,我尝试过这样的事情:

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套接字,但是当我希望服务器有输出时,不会读取任何数据。

1 个答案:

答案 0 :(得分:1)

您不能忽略sock.accept()的返回值:它返回一个元组,其中第一项是连接的套接字对象。它与sock不同,makefile()的唯一目的是接受(可能是几个)连接。您需要在此连接的套接字对象上调用sock,而不是原始{{1}}。