尝试在Mac Air上的Eclipse中运行python cgi服务器,并在Firefox中显示hello world,有两个问题。下面是要在文件run_server.py中运行的代码
from http.server import HTTPServer
from http.server import CGIHTTPRequestHandler
def run_server(handler_class,server_class=HTTPServer ):
server_address = ('', 8000)
httpd = server_class(server_address, handler_class)
httpd.serve_forever()
def main():
run_server(CGIHTTPRequestHandler)
if __name__ == '__main__':
main()项目目录下的目录结构
analytics
\
run_server.py
cgi-bin
\
index.pyindex.py
#!/usr/bin/env python
print('Content-type: text/html;\n\n')
print('<h1>Hello, world!</h1>')在项目目录中的命令行中,可以使用
$ python -m analytics.run_server要使用-m选项,请确保analytics目录中有一个__init__.py。现在尝试加载页面
http://localhost:8000/cgi-bin/index.py在Chrome中,一切都是正常的。那么问题出在哪里呢?在Firefox中,这个url是永远找不到的。同样在Mac上,如果您从Eclipse IDE内部运行服务器,cgi会尝试在安装了python 2 Firefox 404s的操作系统上运行python 3代码,超时,显示一个空白页面,或者如果url问题得到解决,则会尝试保存文件。当存在url问题时,它也不会提供静态内容。Eclipse控制台在运行cgi时,将显示来自python lib site.py print语句的语法错误的堆栈跟踪,从而揭示问题的本质。查看Python 3中的新增功能
Old: print >>sys.stderr, "fatal error"
New: print("fatal error", file=sys.stderr)在下面的答案部分,对这两个问题的简单解决方案如下所示。
发布于 2020-04-17 06:07:46
添加或创建文件/etc/localhosts,如sudo vi /etc/localhosts或您选择的编辑器。
127.0.0.1 localhost这修复了两年前的一个已知bug (链接如下),两个月前作为副本关闭,并包含上面的变通方法,非常接近底部。https://bugzilla.mozilla.org/show_bug.cgi?id=1433933有一个5年前打开的活跃bug,更新于6天前,2020年4月10日,看起来非常接近完成。https://bugzilla.mozilla.org/show_bug.cgi?id=1220810无论何时完成,你仍然需要更新火狐。
对于python版本的冲突,从命令行运行服务器在执行cgi时没有任何问题,然而,尝试在index.py中运行服务器不起作用,当shebang path #!(词源锐利的bang,或shell bang)是
#!/usr/bin/env python
在Mac上,它采用默认的python2安装,但正在尝试运行python3代码(假设您已经升级,因为python2已过生命周期)。尽管更新了操作系统,苹果还是保留了Python2的向后兼容性,尽管它的日子屈指可数了。最终,操作系统和应用程序将不再依赖于任何安装了python的操作系统。不确定服务器运行脚本时Eclipse拾取Python2的确切机制,尽管解释器是3。将路径设置为#!/usr/bin/env python3无效,#!/usr/bin/python3也无效。什么能做到?找到python 3的绝对路径并使用它,它甚至应该出现在错误堆栈跟踪中,但这是我的设置中的一个示例。
#!/Library/Frameworks/Python.framework/Versions/3.6/bin/python3
https://stackoverflow.com/questions/61260847
复制相似问题