【问题标题】:pymysql don't running in python cgipymysql 不在 python cgi 中运行
【发布时间】:2020-04-26 11:45:14
【问题描述】:

我正在使用 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 中可以正常工作。

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

我做错了什么?

【问题讨论】:

    标签: python apache cgi centos7


    【解决方案1】:
    <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 索引文件应该能够指向正确的路径。根据您需要从目录中删除处理程序的文档。

    【讨论】:

    • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常质量更高,更有可能吸引投票。
    • 只是配置错误,这里没什么好解释的。只需阅读文档如何使用 apache2 部署 python 应用程序。只是设置错误而已。签出此链接作为解释:-digitalocean.com/community/tutorials/…
    • 那么你应该在你的答案中包含它,并明确指出配置的哪些部分是错误的,以及哪些更改可以修复它。
    猜你喜欢
    • 2016-07-30
    • 2015-03-28
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    相关资源
    最近更新 更多