我正在尝试在Python中使用Subprocess来以类似服务器的方式保持外部脚本的运行。外部脚本首先会加载一个模型,一旦加载完成,它就会通过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()
通过子进程反复处理输入字符串,如果我使用stdout.read()
或者stdout.readline()
,输出将会为空。然而,当我在读取STDOUT之前使用tokenizer.stdin.close()
关闭STDIN时,它可以正常工作,但这会关闭子进程,这不是我想要的,因为在发送另一个请求之前,我必须重新加载整个外部脚本。
是否有一种方法可以在Python中以类似于服务器的方式使用子进程,而无需关闭和重新打开它?
tokenizer.stdin.flush()
。 - onon15subprocess.Popen.communicate
的实现以了解如何操作。 - Fred Foo