我尝试使用如下子流程模块与python解释器交互:
import subprocess
def start(executable_file):
return subprocess.Popen(
executable_file,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
def read(process):
return process.stdout.readline().decode("utf-8").strip()
def write(process, message):
process.stdin.write(f"{message.strip()}n".encode("utf-8"))
process.stdin.flush()
def terminate(process):
process.stdin.close()
process.terminate()
process.wait(timeout=0.2)
process = start("python")
while True:
write(process, input())
print(read(process))
terminate(process)
但似乎已经陷入僵局。
如果有人知道如何使用python代码与python交互并恢复stdout、stderr和流模式。
您需要对子流程使用communicate()
而不是read()
和write()
,否则会导致死锁。
请参阅本页中间的红色警告叉线。