我想用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套接字,但是当我希望服务器有输出时,不会读取任何数据。
答案 0 :(得分:1)
您不能忽略sock.accept()
的返回值:它返回一个元组,其中第一项是连接的套接字对象。它与sock
不同,makefile()
的唯一目的是接受(可能是几个)连接。您需要在此连接的套接字对象上调用sock
,而不是原始{{1}}。