Python CGI可执行文件

时间:2017-03-15 10:42:31

标签: python apache cgi shebang

我正在尝试使用python脚本实现CGI。每当我打开127.0.0.1/hello时,文件就会被下载而不是执行。以下是我在000-default.conf

中的sites-available文件
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
        AddHandler cgi-script .py
    </Directory>

    <Directory /var/www/>
        Options ExecCGI Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all 
        AddHandler cgi-script .py
    </Directory>

    ScriptAlias /cgi-bin/ /usr-lib/cgi-bin/ 
    <Directory "/usr-lib/cgi-bin/">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

我在

中安装了python
/home/musigma/anaconda3/bin 

所以我将以下作为shebang行添加到我的python文件

#!/home/musigma/anaconda3/bin python3

以下是我的python文件的内容

#!/home/musigma/anaconda3/bin python3
print("Content-type:text/html\r\n\r\n")
print("<html>")
print("<head><title>cgi script </title></head>")
print("<body>")
print('<p>I think it worked</p>')
for i in range(5):
    print("<h1>hello world</h1>")
print("</body>")
print("</head>")

我已将文件放在/var/www中。我还运行了以下行来使我的python文件成为可执行文件

sudo chmod 755 hello.py 

但这仍然不能使我的python脚本成为可执行文件。文件被下载而不是执行。我不知道如何让事情发挥作用。任何方向都会有很大的帮助。我尝试过这些链接,但它们并没有达到我的目的。我已经照顾好了这些事情

Python CGI executable script downloads / shows script code

自从过去的四五个小时以来,我一直试图解决这个问题,并且不确定下一步该做什么。任何方向都会很棒。

PS:我使用的是ubuntu 16.04

apache版本

Server version: Apache/2.4.18 (Ubuntu)
Server built:   2016-07-14T12:32:26

2 个答案:

答案 0 :(得分:1)

仅设置目录/usr-lib/cgi-bin/以允许可执行的CGI脚本。这就是:

Options +ExecCGI

表示。

因此,请按照已指出的方式修复#!行,然后将脚本移至目录/usr-lib/cgi-bin/

最后,使用/cgi-bin/hello.py的网址路径。

有关为可执行CGI脚本设置Apache的更多信息,请参阅Apache文档:

答案 1 :(得分:0)

如果您将文件复制/符号链接到hello.cgihello.py怎么办?那么127.0.0.1/hello.cgi127.0.0.1/hello.py会产生源代码或执行结果吗?

尝试从以下位置更改脚本的第一行:

#!/home/musigma/anaconda3/bin python3

为:

#!/home/musigma/anaconda3/bin/python3

另外,我原本认为默认情况下你的脚本的路径是127.0.0.1/hello.py(包括扩展名)。