Apache2.4下執行Python檔案(CentOS7)
如果修改apache伺服器conf/httpd.conf檔案Apache伺服器無法啟動,可以使用這個命令檢視是修改的過程中是否否存在語法錯誤:
httpd.exe -n "MyServiceName" –t (其中MyServiceName是服務在計算機中的名稱)
好,進入正題,開始在伺服器上配置CGI環境,伺服器的系統為CentOS7
首先肯定是安裝Apache伺服器,如何在CentOS7下安裝Apache伺服器已經在我的上一篇部落格(http://blog.csdn.net/brazy/article/details/77164666)中做了詳細的介紹,在這裡就不再介紹了,現在假設已經裝好了Apache伺服器。
首先是安裝Python,不過一般雲伺服器買的時候就預裝了Python,(可以直接在命令列中輸入Python看是否出現Python直譯器即可),如果沒有安裝,那就用命令列安裝
yum -y install python
然後就是配置CGI環境:
直接修改/etc/conf/httpd.conf檔案
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
將這一行前面的註釋去掉,然後再加上這幾行,這樣cgi的目錄就在/var/www/cgi-bin下了
<Directory "/var/www/cgi-bin"> AllowOverride None Options +ExecCGI Order allow,deny Allow from all AddHandler cgi-script .cgi .pl .py </Directory>
這樣伺服器就已經配置好了CGI環境,伺服器可以執行CGI指令碼程式了。
然後就是在伺服器上執行Python程式,執行python指令碼了
為了驗證有沒有設定好環境,先執行一個測試python檔案
#!/usr/bin/python
# -*- coding: UTF-8 -*-
print "Content-type:text/html"
print # 空行,告訴伺服器結束頭部
print '<html>'
print '<head>'
print '<meta charset="utf-8">'
print '<title>Hello Word - 我的第一個 CGI 程式!</title>'
print '</head>'
print '<body>'
print '<h2>Hello Word! 我是來自菜鳥教程的第一CGI程式</h2>'
print '</body>'
print '</html>'
檔名為hello.py,檔案放在/var/www/cgi-bin目錄中
檔案儲存後修改 hello.py,修改檔案許可權為 755:
chmod 755 hello.py然後就是在瀏覽器中輸入你的伺服器的IP/cgi-bin/hello.py,就可以看到如下效果
然後就是採用POST/GET方法讀取並顯示使用者的資料:
對於這個方案,我們將通過建立一個含有三個輸入域和一個提交按鈕的網頁/var/www/html/page2.html開始。
- <html>
- <h1>Test Page 2</h1>
- <formname="input"action="/cgi-bin/myscript-2.py"method="get">
- First Name: <inputtype="text"name="firstName"><br>
- Last Name: <inputtype="text"name="lastName"><br>
- Position: <inputtype="text"name="position"><br>
- <inputtype="submit"value="Submit">
- </form>
- </html>
當"Submit"按鈕點選,/var/www/cgi-bin/myscript-2.py指令碼將被執行(通過action引數指定)。/var/www//html/page2.html顯示在web瀏覽器中的圖片如下所示(注意,三個輸入域已經被填寫好了):
/var/www/cgi-bin/myscript-2.py的內容如下:
- #!/usr/bin/python
- import cgi
- form = cgi.FieldStorage()
- print"Content-Type: text/html"
- print""
- print"<html>"
- print"<h2>CGI Script Output</h2>"
- print"<p>"
- print"The user entered data are:<br>"
- print"<b>First Name:</b> "+ form["firstName"].value +"<br>"
- print"<b>Last Name:</b> "+ form["lastName"].value +"<br>"
- print"<b>Position:</b> "+ form["position"].value +"<br>"
- print"</p>"
- print"</html>"
正如前面提到,import cgi語句用來確保能夠處理使用者通過web輸入表單輸入的資料。web輸入表單被封裝在一個表單物件中,叫做cgi.FieldStorage物件。一旦開始輸出,"Content-Type: text/html"是必需的,因為web伺服器需要知道接受自CGI指令碼的輸出格式。使用者輸入的資料在包含form["firstName"].value,form["lastName"].value,和 form["position"].value的語句中可以得到。那些中括號中的名稱和/var/www/html/page2.html文字輸入域中定義的名稱引數一致。
當網頁上的"Submit"按鈕被點選,下面的網頁將被返回。
這個例子的要點就是你可以很容易地讀取並顯示使用者在web表單上輸入的資料。除了以字串的方式處理資料,你也可以用Python將使用者輸入的資料轉化為可用於數值計算的數字。
這樣就可以完成用python指令碼處理一些資料了,這樣還是很棒的。還有幾點注意點一點要講一下:
1.放在cgi-bin目錄下的python檔案的檔名一定不要是cgi.py,因為python處理程式要import cgi,這樣會引起命名衝突,從而找不到cgi模組
2.如果沒有命名為cgi.py的檔案,但是仍然仍然有錯誤
AttributeError: 'module' object has no attribute 'FieldStotage',
那就在python下,輸入
import cgi
print cgi.__file__
看cgi檔案所在的目錄,如果那個目錄下除了cgi.py,還有cgi.pyc,那就刪除cgi.pyc,因為這個檔案也會引起名字衝突而找不到這個模組
這是在使用cgi模組時,一定要注意的問題,博主在配置的過程中就被這幾個坑給坑慘了,一定要記住不要將python檔案命名為cgi.py,
坑還是太多了。。。
3.一定要學會去看日誌資訊,因為這個能給我們很多有用的資訊,指導我們完成配置,檔案為/var/log/httpd/error_log
參考資料:
http://www.runoob.com/python/python-cgi.html
http://www.jb51.net/article/97434.htm
http://www.linuxidc.com/Linux/2014-12/110188.htm
http://blog.csdn.net/corcplusplusorjava/article/details/39614041
http://python.jobbole.com/83788/