【发布时间】:2020-07-28 08:10:08
【问题描述】:
我正在使用子进程生成conda create 命令并捕获生成的stdout 以供以后使用。我还立即将stdout 打印到控制台,以便用户仍然可以看到子进程的进度:
p = subprocess.Popen('conda create -n env1 python', stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in iter(p.stdout.readline, b''):
sys.stdout.write(line.decode(sys.stdout.encoding))
当conda create 需要用户输入时,这可以正常工作直到执行到一半:它提示Proceed (n/y)? 并等待用户输入选项。但是,上面的代码不会打印提示,而只是等待“在空白屏幕上”输入。收到输入后,将打印提示之后,然后按预期继续执行。
我认为这是因为输入以某种方式阻止了将提示写入stdout,因此readline 直到输入块被解除后才接收新数据。
有没有办法确保在子进程等待用户输入之前打印输入提示?注意我在 Windows 上运行。
【问题讨论】:
-
请注意,
readline实际上会查找整行,直到行尾字符\n。Proceed (n/y)? y提示确实不输出整行,但需要内联输入(y)。 -
你提出了一个很好的观点。改用
read是否可能是一个简单的修复?
标签: python subprocess conda stdout