python - 输出正确的 CGI、Python 脚本时遇到问题?

标签 python server cgi

所以我试图让我的项目尽可能简单,因此我决定在我的 Python 脚本中使用 CGI 来运行一个可以执行某些操作的程序。

这是我当前的设置:

在 CMD 中,我运行: python -m http.server --cgi 8000

这为我启动了一个服务器。我可以通过 localhost:8000 访问它。

接下来,我尝试通过输入脚本所在的实际地址来找到我的目录:localhost:8000/test/cgi-bin/test.py

这给了我实际文件的输出,而不是真正正确地读取它。我尝试了两种不同的方式在Python文件上输出数据,例如:

import sys
sys.stdout.write("Content-type: text\html \r\n\r\n")
sys.stdout.write("<html><title>Hi</title><body><p>This is a test</p></body></html>")

print("Content-Type: text/html\n")
print("<!doctype html><title>Hello</title><h2>hello world</h2>")

这两者都会导致实际代码显示在我的浏览器中。

几个问题:

  • 如何让我的服务器自动将我带到我尝试运行的文件的位置?
  • 如何让 python 脚本输出正确的内容?
  • 我的设置正确吗?

我试图避免安装任何新的依赖项并使其尽可能少。

我在Python3、Windows7上运行。我试图避免下载更多的 pip 包和依赖项,因为我的工作在技术上非常谨慎。

非常感谢任何帮助。

最佳答案

首先,我想说,在 2017 年编写简单的 CGI 脚本是勇敢者的一种方式。如果您使用bottle,您的生活会更轻松。或 flask 。

但如果您愿意,可以从这里开始。

  1. python -m http.server --cgi 假定 cgi-bin 位于当前目录中。也就是说,您应该转到 test 目录并从那里启动命令。然后调用http://localhost:8000/cgi-bin/test.py

  2. 您的 cgi 脚本不正确。该脚本应该是可执行的。我不确定当您运行 http.server 时,它是否需要 Windows 中的 shebang 行,但当您在 ​​Windows 下使用 Apache Web 服务器运行 CGI 脚本时,这是必需的。 shebang 行以 #! 开头,然后包含 python3 解释器的完整路径,并且该行应以 \n 结尾,而不是 \r\n,否则无法工作。

    之后,您应该输出所有 HTTP header ,打印一个空行,并输出您的内容。所有 HTTP header 应以“\r\n”分隔,而不是“\n”。

下面是一个在 OS X 上运行的 CGI 脚本示例:

#!/usr/bin/env python3
import sys
sys.stdout.write('Status: 200 OK\r\n')
sys.stdout.write('Content-type: text/html;charset="utf-8"\r\n\r\n')

print('<h1>Hello, world!</h1>')    

关于python - 输出正确的 CGI、Python 脚本时遇到问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44934615/

相关文章:

For循环中的Python最后一次迭代

python - 如何将随机数分配给变量?

java - 有什么理由不应该预编译 JSP 页面吗?

git - 将 git 服务器作为 CGI 运行?

python - 为什么我的脚本不写入文件?

Python 相当于设置 if not null

networking - 实现类似于 Spotify 的音频流服务

apache - 控制服务器上自定义文件的缓存过期

提交表单之前组合框选定的值发生更改

sockets - 如何通过CLI使用PHP Fastcgi进程