gpt4 book ai didi

python - 如何在 python 中使用 mysql 数据库调试我的 cgi 脚本。我对如何调试不熟悉

转载 作者:行者123 更新时间:2023-12-01 05:32:23 24 4
gpt4 key购买 nike

我的代码在服务器上运行时显示一些错误。我检查了服务器错误日志,但仍然不知道它到底意味着什么。它说脚本提前结束。现在我想调试我的代码以检查每一行代码的作用?我该如何调试我的代码。我对此真的很陌生。

#!/usr/bin/python
import cgitb
import MySQLdb
import cgi

cgitb.enable()

form = cgi.FieldStorage()

f_name = form.getvalue('firstname', '')
l_name = form.getvalue('lastname', '')
age = form.getvalue('age', 0)
gender = form.getvalue('gender', '')

db = MySQLdb.connect("localhost", "root", "gaurav", "Info")

cursor = db.cursor()

sql = "INSERT INTO PERSON (F_Name, L_Name, Age, Gender) VALUES ('%s',' %s',' %d',' %s')" % (f_name, l_name, age, gender)

try:
cursor.execute(sql)
#print "Hello !!"
#print "no of rows inserted: %d " % cursor.rowcount
db.commit()

except:
db.rollback()

db.close()

print "Content-type:text/html"
print "<html>"
print "<h1>DATABASE</h1>"
print "</html>"

最佳答案

问题是在 HTTP 中, header 必须以空行结尾。因此,您不是发送一个标题行和一个 3 行正文,而是发送四个标题行,除了其中一个之外,所有标题行都是无意义的,然后在没有完成标题的情况下退出。

因此,服务器提示脚本在未完成写入响应的情况下退出。

试试这个:

print "Content-type:text/html"
print
print "<html>"
print "<h1>DATABASE</h1>"
print "</html>"
<小时/>

如果你想记录每一行代码,正如你在评论中所说,有两种方法可以做到。

快速而肮脏的方法是打开一个文件并写入到其中。例如:

#!/usr/bin/python
import cgitb
import MySQLdb
import cgi

with open('/tmp/logfile.log', 'wb') as logfile:

logfile.write('About to enable cgitb\n')
cgitb.enable()

logfile.write('About to create FieldStorage\n')
form = cgi.FieldStorage()

logfile.write('About to get firstname\n')
f_name = form.getvalue('firstname', '')
logfile.write('Firstname is {}. About to get lastname\n'.format(firstname))
l_name = form.getvalue('lastname', '')
logfile.write('Lastname is {}. About to get age\n'.format(lastname))
# and so on

更简洁的方法是使用 logging Python自带的模块:

#!/usr/bin/python
import cgitb
import MySQLdb
import cgi
import logging

logging.info('About to enable cgitb')
cgitb.enable()

logging.info('About to create FieldStorage')
form = cgi.FieldStorage()

这更简单(不需要在末尾添加 \n,记录器可以为您格式化字符串,因此您不必使用 .format 手动执行此操作> 或 % 等)。而且它更加灵活(您可以在不同级别记录不同的消息,您可以配置日志的位置 - 例如,将它们发送到您的 system log 而不是/tmp 中的文件等)。而且它更加健壮(无需担心忘记关闭文件并丢失最后的日志消息 - 请注意,在非日志记录示例中,我使用了 >with 语句以获得相同的效果,但这需要缩进整个程序)。

如果您有时间完成 Logging Tutorial ,你应该这样做。

<小时/>

最后,如果您非常确定某行引发了异常,但您无法在服务器日志中的任何位置找到异常信息,则以下是记录异常的方法:

import traceback
try:
the line that raises
except Exception:
traceback.print_exc(None, logfile)
raise

这会捕获异常,打印出与在控制台解释器 session 中获得的完全相同的详细回溯,但打印到您之前打开的日志文件而不是控制台,然后让异常正常传播。

如果您使用logging模块,您可以使用它自己的内置异常日志记录,或者如果您想自定义一些内容,您可以使用sys.exc_infotraceback.format_exception 来获取要记录的字符串(或一系列字符串)。

关于python - 如何在 python 中使用 mysql 数据库调试我的 cgi 脚本。我对如何调试不熟悉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19922242/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com