【发布时间】:2017-08-29 01:55:50
【问题描述】:
我有以下小的 python 脚本来运行本地服务器来测试一些 html:
print('opened')
from http.server import HTTPServer, SimpleHTTPRequestHandler
server_address = ('', 8000)
httpd = HTTPServer(server_address, SimpleHTTPRequestHandler)
print("Listening at https://127.0.0.1:8000/ . . .")
httpd.serve_forever()
当我在终端中运行它时,它会阻止 print 语句:没有打印任何内容。但是服务器工作正常,我可以在浏览器中转到localhost:8000 并访问我的html 文件。但是,如果我注释掉最后一行,即对serve_forever() 的调用,它可以工作,同时打印 'opened' 和 'Listening at https:127.0.0.1:8000/ 。 . .'.当然除了它实际上没有工作,因为现在服务器没有运行。
我觉得这很令人困惑。前几行在最后一行之前执行。为什么最后一行会导致前面的行不起作用?
如果有人要问,Windows7 上的 Python3,但我怀疑这是否相关。
【问题讨论】:
-
如果您在最后一个
print之前调用sys.stdout.flush(),会打印任何内容吗? -
因为我尝试执行相同的操作,并且在服务器运行的同时收到了两条消息。能否请您提及您的平台和 python3 版本?
-
您的打印没有发生的原因是,您的操作系统提供的库正在缓冲输出。因为我使用的是 Linux,所以它不适合我。 sys.stdout.flush 强制它显示缓冲到该点的任何内容。
-
仅供参考,与 OP 相同的代码在 Mac OS X 上对我来说效果很好。
-
我想你会喜欢这些帖子 stackoverflow.com/questions/230751/… 和 stackoverflow.com/questions/25368786/… 不冲洗也不会很好用。
标签: python python-3.x simplehttpserver