python - 在 Python 中通过服务器与可执行文件交互?

标签 python subprocess popen

我想在 TCP 服务器上运行可执行文件,并以交互方式从套接字连接获取其输入,并将输出发送回客户端,直到可执行文件终止。我正在尝试通过 subprocessPopen 类进行管道传输,但它对与可执行文件的交互没有帮助(它只接受一次输入,但我希望输入全部被接受)直到程序退出的时间)。

假设我向服务器发送“1”输入,那么服务器必须将与“1”输入相对应的标准输出发送给客户端,然后请求下一个输入,直到可执行文件继续退出。

最佳答案

只需提供套接字作为子进程的标准输入、输出和错误。例如:

import socket
import subprocess

listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listener.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
listener.bind(('0.0.0.0', 0))
listener.listen(5)
print(listener.getsockname())

try:
    while True:
        client, addr = listener.accept()
        subprocess.Popen(['cat'], stdin=client, stdout=client, stderr=client)
        client.close()
except KeyboardInterrupt:
    pass
finally:
    listener.close()

这可能需要兼容 POSIX 的操作系统。

关于python - 在 Python 中通过服务器与可执行文件交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24444484/

相关文章:

bash - 找不到subprocess.Popen返回命令

Python - 我如何将长命令添加到子进程,当我在一行中应用时,整个命令不起作用

c - 使用 system() 运行系统命令并发送输出

c++ - popen ("ps -fu $USER","r")不会给出所有原始输出结果限制为 81 个字符长

python - 函数如何知道调用函数的装饰器

python - 如何在 python 中生成另一个进程并捕获输出?

python - 如何使用 spaCy 从数据框列创建标记化单词列表?

python - 将一个 Popen 的标准输出重定向到另一个 Popen 标准输入

python - 将列插入数据框而不修改原始框架

python - 为什么 numpy.prod() 对于我的一长串自然数错误地返回负结果或 0?