Startserver不会将数据发送回POpen.communicate

时间:2015-03-10 18:19:13

标签: python

我有这个脚本,它应该从我的脚本启动简单的服务器:

import subprocess

cmd_line = "python -m SimpleHTTPServer 8000"
p = subprocess.Popen(cmd_line, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
out = p.communicate()[0]
print out

但我总是得到这个错误:

CTraceback (most recent call last):  File "startserver.py", line 5, in <module>
    out = p.communicate()[0]
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 790, in communicate
    stdout = _eintr_retry_call(self.stdout.read)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 476, in _eintr_retry_call
    return func(*args)
KeyboardInterrupt

1 个答案:

答案 0 :(得分:3)

您正在中断程序,该命令启动一个服务器,因此使用communicate将不会输出,因为数据被缓冲并且通信将等到进程完成,您只看到输出{{ 1}}当你停止代码运行时。

如果您启动服务器并转到KeyboardInterrupt,您会看到它正在运行。

如果您希望实时查看启动消息和输出,请http://127.0.0.1:8000/使用iter并删除通信:

stdout.readline

除非您抓住p = subprocess.Popen(['python', '-m', 'SimpleHTTPServer', '8000'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT,universal_newlines=True) for line in iter(p.stdout.readline,""): print(line) ,否则在您手动停止代码时仍会输出一个。