我使用的是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权限。这就是问题所在吗,是否有任何环境变量需要设置?
我做错了什么?
<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索引文件应该能够指向正确的路径。