1. 程式人生 > >Apache2.4下執行Python檔案(CentOS7)

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開始。

  1. <html>
  2. <h1>Test Page 2</h1>
  3. <formname="input"action="/cgi-bin/myscript-2.py"method="get">
  4. First Name: <inputtype="text"name="firstName"><br>
  5. Last Name: <inputtype="text"name="lastName"><br>
  6. Position: <inputtype="text"name="position"><br>
  7. <inputtype="submit"value="Submit">
  8. </form>
  9. </html>

當"Submit"按鈕點選,/var/www/cgi-bin/myscript-2.py指令碼將被執行(通過action引數指定)。/var/www//html/page2.html顯示在web瀏覽器中的圖片如下所示(注意,三個輸入域已經被填寫好了):

/var/www/cgi-bin/myscript-2.py的內容如下:

  1. #!/usr/bin/python
  2. import cgi
  3. form = cgi.FieldStorage()
  4. print"Content-Type: text/html"
  5. print""
  6. print"<html>"
  7. print"<h2>CGI Script Output</h2>"
  8. print"<p>"
  9. print"The user entered data are:<br>"
  10. print"<b>First Name:</b> "+ form["firstName"].value +"<br>"
  11. print"<b>Last Name:</b> "+ form["lastName"].value +"<br>"
  12. print"<b>Position:</b> "+ form["position"].value +"<br>"
  13. print"</p>"
  14. 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/