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

最佳答案

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

关于python - 使用unix套接字进行子进程stdin,stdout,stderr,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15315197/

10-11 04:25