gpt4 book ai didi

python - 重复写入 STDIN 并读取子进程的 STDOUT 而不关闭它

转载 作者:太空狗 更新时间:2023-10-29 21:55:30 26 4
gpt4 key购买 nike

我正在尝试在 Python 中使用一个子进程来保持外部脚本以类似服务器的方式打开。外部脚本首先加载一个模型。完成后,它会通过 STDIN 接受请求并将处理后的字符串返回到 STDOUT。

到目前为止,我已经尝试过了

tokenizer = subprocess.Popen([tokenizer_path, '-l', lang_prefix], stdin=subprocess.PIPE, stdout=subprocess.PIPE)

但是,我不能用

tokenizer.stdin.write(input_string+'\n')
out = self._tokenizer.stdout.readline()

为了通过子进程重复处理 input_strings – 无论我使用 stdout.read() 还是 stdout.readline(),out 都将是空的>。但是,当我在读取 STDOUT 之前使用 tokenizer.stdin.close() 关闭 stdin 时它会起作用,但这会关闭子进程,这不是我想要的,因为我必须重新加载整个外部脚本在发送另一个请求之前再次发送。

有什么方法可以在 python 中以类似服务器的方式使用子进程而无需关闭并重新打开它?

最佳答案

感谢this Answer ,我发现一个 slave handle必须使用以便与子进程正确通信:

master, slave = pty.openpty()
tokenizer = subprocess.Popen(script, shell=True stdin=subprocess.PIPE, stdout=slave)
stdin_handle = process.stdin
stdout_handle = os.fdopen(master)

现在,我可以在不关闭它的情况下与子进程通信

stdin_handle.write(input)
stdout_handle.readline() #gets the processed input

关于python - 重复写入 STDIN 并读取子进程的 STDOUT 而不关闭它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13603334/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com