获取python cgi程序的异常

2020年10月13日 / 11次阅读 / Last Modified 2020年10月15日
CGI异常处理

用python写cgi程序,由于caller是web server,如果有错误不太好调试,甚至有的时候web server的提示会误导你,它可能会给我 50x错误,不过这些错误基本都是程序本身有问题造成的。

python标准库中有一个cgitb模块,import,enable,就可以很方便的debug python cgi。如果有错误,cgitb模块会直接向浏览器输出错误。

#!/usr/bin/python3

import cgitb
cgitb.enable()

import sys
sys.stderr = sys.stdout

import os
import random

print('Content-type: text/html\n')
print('If you see this, thank God!! We have CGI.')
print(random.randint(0,10000))
print()

for k in os.environ():
    print(k + ' : ' + os.environ[k])

这段代码是有错的,os.environ是一个dict对象,代码却把它当成了函数调用。代码中 import cgitb; cgitb.enable(),通过 web server 调用,效果如下:

how nice!

cgitb还可以将错误导入日志中去,如果你觉得错误直接暴露出来不方便的话:

import cgitb
cgitb.enable(display=0, logdir="/path/to/logdir")

关于cgitb的代码很少,测试ok后,可以在生产环境中删除。

-- EOF --

本文链接:https://www.pynote.net/archives/2560

留言区

《获取python cgi程序的异常》有3条留言

电子邮件地址不会被公开。 必填项已用*标注

  • 麦新杰

    有人用cgitb模块在普通调试时打印异常:

    def func(a, b):
            return a / b
    if __name__ == '__main__':
            import cgitb
            cgitb.enable(format='text')
            import sys
            import traceback
            func(1, 0)
     [回复]

  • 麦新杰

    有一些错误,貌似cgitb模块显示不出来,页面还是直接 500 错误。 [回复]

  • 麦新杰

    If your script does not have any syntax errors, try adding import cgitb; cgitb.enable() to the top of the script. [回复]


前一篇:
后一篇:

More


©Copyright 麦新杰 Since 2019 Python笔记

go to top