我正在尝试在 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 - out 将只是空的,无论我使用stdout.read()
or stdout.readline()
。但是,当我tokenizer.stdin.close()
在读取 STDOUT 之前关闭标准输入时它会起作用,但这会关闭子进程,这不是我想要的,因为我必须在发送另一个请求之前再次重新加载整个外部脚本。
有没有办法在 python 中以类似服务器的方式使用子进程而无需关闭并重新打开它?