Python CGI编程详细步骤,和说说我踩的坑!!

最近在学python,刚接触python高级编程-gci编程,照着网上的资料去配置文件 ,但是其中遇到了很多问题,可以说一天都呆坑里,特记录下这些,总结下,也以便帮小伙伴们解决问题。

我参考的是这篇文章:https://blog.csdn.net/qq_24504591/article/details/81670766

但是有些地方有点不同,我接下里会慢慢说

一、实验工具:

Apache2.4、python3.7

这两个文件的下载安装文件的下载可以参照上面的那个兄弟的文章。(python如果你是现在安装,我觉得这篇文章你还是晚点来看,先把之前的基础的东西学下比较好)

二、实验步骤(注意:我们的配置基本上是在Apache24-->conf-->httpd.conf,接下来我就不重复说明):
首先进入httpd.conf文件,来配置,这个文档比较长,大家可以看的的演示图片的相应行号来快速找到需要修改的部分。

1、配置文件的根目录:

设置SRVROOT根目录,目录就是你的Apache的存放路径,比如我的存放路径时D:/Apache24,因为之后到多次用到这个根路径,所以我们为了后期的修改方便,利用引用“${SRVROOT}”的方式来书写配置

2、设置我们的py文档的存储路径,以便Python解释器能够找到它(也就是设置访问权限

我们选择直接放在根目录的cgi-bin文件夹下

找到下处:

修改成如下:

配置文件:

<Directory "${SRVROOT}/cgi-bin">
   AllowOverride None
   Options Indexes FollowSymLinks ExecCGI
   Require all granted
   Require host ip
</Directory>

 注意,在上面也有一个<Directory>标签,不用改

3、开启cgi_module modules/mod_cgi.so模块(去掉模块前的注释#):

----------------------------------------------------------------------------坑1----------------------------------------------------------------------------------------

网上很多文章说在配置文件中还需要加:ScScriptInterpreterSource Registry,这个的作用是帮我们找到Pyton解释器用的,但是,注意,这位是win32为操作系统用的,对于64位的没有用,所以我们选择直接在py文件中声明编译器的位置,下面我们会说RegistryScriptInterpreterSource Registry

4、文件配置那块算结束了,我们来写py文件,上面也说了,我们把文件放到cgi-bin文件夹下面。具体代码如下:

#!C:/Users/Administrator/AppData/Local/Programs/Python/Python37/python.exe
# -*- coding: utf-8 -*-
print ("Content-type:text/html\n\n")
print                               # 空行,告诉服务器结束头部
print ('<html>')
print ('<head>')
print ('<meta charset="utf-8">')
print ('<title>Hello Word!</title>')
print ('</head>')
print ('<body>')
print ('<h2>Hello Word!</h2>')
print ('</body>')
print ('</html>')

 说明:1、第一行是申明我的解释器的位置,记住,一定要写第一行,python的格式规范

2、因为我们用的是Python3.7,输出语句print("")是要加括号的,一定要注意,不然之后会报500错误

3、第三行的print ("Content-type:text/html\n\n"),这是声明格式,此处注意,其中的“\n\n”,两个“\n”,一个都不能少,少了也会报500错误。

大家可能会问,编译器是怎么找到我们的文件的?答案在这里

5、修改端口:

端口可改可不改,防止默认的的80端口被占用,我们改下,我改成"5023"

6、增加解释种类

去掉改行的#注释,并在后面再加上“.py”,以增加对python语言的兼容

 7、到上面为止,配置、文件算是写完啦,接下来准备运行了

1、启动服务器

你也可以选择命令行启动

https://blog.csdn.net/weixin_37909363/article/details/80332733

建议命令行启动,这样可以发现无法开启的报错原因。

服务器启动上,碰到很多坑,后面会说

8、进入网址栏,输入  http://localhost:5032/cgi-bin/hello.py

运行成功。

 接下来再说说我遇到报错坑:(大部分是在服务器启动的坑)

一、报错:Errors reported here must be corrected before the service can be started.

这句话的意思其实是:如果在这句话出现的时候,有错误的报告出来,那应该先解决这个错误。如果没有出现报错,就可以无视这句话,所以大家在看到这句话的时候,不必惊慌,没事

二、刚说完这句话,我就来事了。

报错:Errors reported here must be corrected before the service can be started.
(OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。  : AH00072: make_sock: could not bind to address [::]:443
(OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。  : AH00072: make_sock: could not bind to address 0.0.0.0:443
AH00451: no listening sockets available, shutting down

AH00015: Unable to open logs

通常看到这类错误,无疑,就是端口冲突,但是这端口。。。我怎么没见过?我设置的端口不是5023吗?怎么还冲突了?

其实却是是端口冲突了,不过这回事443端口冲突,这是Apache里面的一些服务程序用的端口,意思是我们电脑上443端口已经被占用了,一般解决端口占用问题,有两种解决方法。

1、关掉占用端口的程序

先找到占用端口号的程序PID:netstat -ano|findstr 端口号

再杀死进程:taskkill /pid {pid}

2、更改配置文件中端口配置,就443端口冲突我们来解决。

找到如下文件目录下:Apache24\conf\extra

更改以下两个文件:httpd-ahssl.conf和httpd-ssl.conf,有443的地方改掉,比如改为442。

还有一种低级错误,会造成端口冲突情况,那就是,重复启动该程序。

三、报错:You don't have permission to access /cgi-bin/hello.py on this server.

这种一般是配置文件出了问题,在设置访问权限的地方配错了,根据以上步骤2即可

 

四、报错:AH01215: Can't find a default Python.\r: D:/Apache24/cgi-bin/hello.py

报错意思是,没有找到默认的Python编译器,然后我就去看看py文件的路径有没有错,我发现没有错,然后我以为它默认通过系统path下去寻找,但是到系统环境变量里去看,也没错,那我就纳闷了,这不是有编译器吗。

然后才发现,确实是没找到解释器,因为我的python代码有错,print("")方法(千万别跟我一样大意了),需要加括号(),另外“\n\n”少了,这点要注意。

而上面的错误,就是通过查看日志文件得到的信息。Apache/logs/error.log。所以,建议大家,在调错时,要运用好日志文件,这是个很好的东西!

猜你喜欢

转载自blog.csdn.net/qq_36528311/article/details/88560409
今日推荐