在python 3.4中使用CGI我继续在标题之前得到"脚本输出结束:measurement.py"错误日志中的错误

时间:2015-07-01 17:16:25

标签: python cgi

目的是让area方法使用cgi和restful服务返回json序列化数据。当我运行request_area()时,我的控制台显示500内部服务器错误,当我检查错误日志时,它会在标题之前显示脚本输出结束:measurement.py'

这是measurement.py

 MemoryStream ms = new MemoryStream(bImage);
 System.Drawing.Image returnImage = System.Drawing.Image.FromStream(ms);
 if (returnImage.Palette.Flags == 2)
 {
      System.Diagnostics.Debug.WriteLine("Image is greyscale");
 }

这是request_area()

#!/usr/bin/python3
__author__ = 'charles'

import json
import logging

import db_utility, db_access


def send_data(data):
    logging.debug(str(data))
    dataJ = json.dumps(data)
    logging.debug("custJ " + str(dataJ))
    lng = len(dataJ)
    logging.debug("len " + str(lng))
    print("Content-Type: application/json; charset=UTF-8")
    print("Content-Length: " + str(lng))
    print()
    print(dataJ)


def area():
    areas = db_access.get_all_areas()
    # print(areas)
    send_data(areas)

哦,在area(),get_all_areas()

中调用函数
import requests

r = requests.get("http://localhost/cgi-bin/measurements_rest/measurement.py/area")
print(r.text)

我无法弄清楚我做错了什么。

1 个答案:

答案 0 :(得分:0)

当你使用apache来调用你的程序时,apache会放入 环境几个变量,包含cgi调用和url的信息。

您感兴趣的是PATH_INFO,其中包含剩余的字符串 未被apache解析,即area。在你的python main中你需要 os.getenv('PATH_INFO')并认出了这个词并称呼你的功能。

或者,使用像cherrypy这样的框架 这样做对你有用吗?

此外,您正在Content-type等标题之前打印内容。删除

print(areas)