簡體   English   中英

配置Apache以像CGI PHP一樣使用Python

[英]Configure Apache to use Python just like CGI PHP

我認為將PHP添加到Apache網絡服務器的一種常見方法是按如下方式進行配置:

ScriptAlias /php5.3 /usr/local/php5.3/bin
Action application/php5.3 /php5.3/php-cgi
AddType application/php5.3 .php

現在,我嘗試為Python編寫類似的配置:

ScriptAlias /python /usr/bin
Action application/python /python/python
AddType application/python .py

我有一個小的測試腳本,如下所示:

print "Content-Type: text/html\n\n"
print "Test"

但是,由於apache錯誤日志顯示以下內容,因此似乎有些錯誤:

Premature end of script headers: python

所以我的第一個想法是我的python響應不正確。 但是,存在Content-Type和兩個換行符。 同樣,用php-cgi調用的類似PHP腳本的輸出也給出了完全相同的輸出。

另外我還沒有找到一個教程來展示如何使python以這種方式工作。 所以也許不可能,但是我很好奇為什么會這樣? 還是我錯過了什么?

您可以將任何類型的可執行文件用作cgi。 您的問題出在您的apache配置中,看起來就像您剛剛完成的那樣。 請查看apache文檔以了解更多詳細信息,但是您不需要Action和AddType。

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

然后將以下內容放入您的cgi-bin中:

#!/usr/bin/python
# test.py
print "Content-Type: text/html\n\n"
print "Test"

確保它是可執行文件,並在/cgi-bin/test.py中查看結果

“所以也許不可能,但是我很好奇為什么會這樣?”

正確。 這是不可能的。 也從來沒有想過。

原因1-Python不是PHP。 總體而言,PHP有望成為CGI。 Python沒有。

原因2-Python本質上不是CGI。 這是一個(幾乎)沒有環境期望的口譯員。

原因3-Python從未被設計為CGI。 這就是為什么通常將Python嵌入到小型包裝器(mod_python,mod_wsgi,mod_fastcgi)中的原因,這些包裝器可以以對運行的Python程序更有意義的形式封裝CGI環境。

如果在使用CRLF字符而不是Unix LF的Windows程序中編輯了.py文件,則會出現錯誤“腳本頭過早結束:”。

某些程序(例如Dreamweaver)在首選項中具有換行符類型。 記事本也使用CRLF。

如果主機具有文件編輯器,則可以通過對當前換行符進行退格並通過該編輯器重新輸入來進行測試,這將僅將任何CRLF更改為LF。 Notepad ++只能使用LF。

例如,當您打開http://localhost/test.py您期望Apache將以某種方式啟動進程/usr/bin/python /var/www/test.py (即具有單個命令行參數的解釋器)。 但這不會發生,因為Apache調用了不帶參數的cgi腳本。 相反,它通過CGI標准化的環境變量提供所有信息。

正如其他人指出的那樣,將python用作純cgi效率低下,但如果出於教育原因,您仍然想這樣做,可以嘗試一下。

假設默認的Apache cgi-bin設置處於活動狀態,則可以在/usr/lib/cgi-bin創建一個名為python (或您選擇的任何名稱)的簡單包裝,其內容如下:

#!/usr/bin/python
import os
execfile(os.environ['PATH_TRANSLATED'])

不要忘記使其可執行: chmod a+x /usr/lib/cgi-bin/python

將這些放在您的Apache配置中:

AddType application/python .py
Action application/python /cgi-bin/python

現在,當您打開http://localhost/test.py Apache將執行/ cgi-bin / python,不帶任何參數,但帶有CGI環境變量。 在這種情況下,我們使用PATH_TRANSLATED因為它直接指向webroot中的文件。
調用execfile在已打開的python進程中解釋該腳本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM