【发布时间】:2018-03-17 11:10:56
【问题描述】:
让我们考虑一下这个 sn-p:
from subprocess import Popen, PIPE, CalledProcessError
def execute(cmd):
with Popen(cmd, shell=True, stdout=PIPE, bufsize=1, universal_newlines=True) as p:
for line in p.stdout:
print(line, end='')
if p.returncode != 0:
raise CalledProcessError(p.returncode, p.args)
base_cmd = [
"cmd", "/c", "d:\\virtual_envs\\py362_32\\Scripts\\activate",
"&&"
]
cmd1 = " ".join(base_cmd + ['python -c "import sys; print(sys.version)"'])
cmd2 = " ".join(base_cmd + ["python -m http.server"])
如果我运行execute(cmd1),输出将毫无问题地打印出来。
但是,如果我运行 execute(cmd2) 而不是什么都不会打印,为什么会这样以及如何修复它以便我可以实时查看 http.server 的输出。
另外,如何在内部评估 for line in p.stdout?它是某种无限循环,直到达到标准输出 eof 还是什么?
这个话题已经在 SO 中讨论过几次,但我还没有找到 Windows 解决方案。上面的 sn-p 实际上是来自 answer 的代码,并试图从 virtualenv 运行 http.server(win7 上的 python3.6.2-32bits)
【问题讨论】:
标签: python windows subprocess sublimetext3 popen