pymysql不在python cgi中运行。

问题描述 投票:1回答:1

我使用的是CentOs 7,并且已经安装了Apache2。 我试图用Python 3运行一个cgi脚本。我有一个名为index.py的文件,其中有以下代码。

#!/usr/bin/env python3.7

import platform
import pymysql
import cgitb
cgitb.enable()

print ("Content-type: text/html\r\n\r\n")
print ("<html>\n<body>")

print ("<div style=\"width: 100%; font-size: 40px; font-weight: bold; text-align: center;\$

connection = pymysql.connect(host='127.0.0.1', user='user', password='password', db='database', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)


try:
       with connection.cursor() as cursor:
                sql = "SELECT * FROM Marken"
                cursor.execute(sql)
                rows = cursor.fetchall()
                for row in rows:
                        print(row['ID'], row['markenName'], '</br>')
finally:
        connection.close()


print ("Python Script Test Page", platform.python_version())
print ("</div>\n</body>\n</html>")

它给出了一个500的内部服务器错误。

我在apache httpd.conf中添加了以下行。

<Directory "/var/www/html/cgi">
    Options +ExecCGI
    AddHandler cgi-script .py
</Directory>

并使该文件可以通过 sudo chmod 755 var/www/html/cgi/index.py

因此,如果我注释掉所有pymysql代码,并在浏览器中进行测试,它就会打印出预期的Python测试页面文本和python平台版本3.7.4。我甚至不能导入pymysql,因为它给出了一个服务器错误。用mysql.connector我也有同样的问题。如果我把pymysql代码作为一个独立的脚本运行,它在shell中正常工作。

我把我的系统配置为非root用户,有sudo权限。这就是问题所在吗,是否有任何环境变量需要设置?

我做错了什么?

python apache cgi centos7
1个回答
0
投票
<VirtualHost *:80>

    <Directory "/var/www/html/cgi">

        Options +ExecCGI

        DirectoryIndex index.py

    </Directory>

    AddHandler cgi-script .py

    DocumentRoot /var/www/html/cgi

</VirtualHost>

在apache配置部分,你没有为python文件定义目录索引,也没有定义DocumentRoot,所以python索引文件应该能够指向正确的路径。

© www.soinside.com 2019 - 2024. All rights reserved.