Python3 CGI

  1. 已經安裝:XAMPP \ python3.7
  2. 以下修改內容均在xampp裏的Apache配置文件:httpd.conf

 

1.設置我們的py文檔的存儲路徑,以便Python解釋器能夠找到它(也就是設置訪問權限)

下面把.py文件放在cgi-bin裏

<Directory "D:/softsave/xamp/cgi-bin">
    AllowOverride None
    Options Indexes FollowSymLinks ExecCGI
    Require all granted
    Require host ip
</Directory>

2.去掉註釋


 

3.在cgi-bin裏的index.py內容爲:

(記得第一行的地址要改成自己的python.exe地址)

#!D:/python/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>')

4.運行apache

 

5. 訪問鏈接:

http://localhost/cgi-bin/index.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

通常看到這類錯誤,無疑,就是端口衝突

其實卻是是端口衝突了,不過這回事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。所以,建議大家,在調錯時,要運用好日誌文件,這是個很好的東西!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章