如何运行Python CGI脚本

2023-12-01

我以前从未设置过服务器(更不用说Python服务器了),我有点迷失了。我如何使用以下代码?我尝试将其放入 cgi bin 目录中,但没有成功。它返回了内部服务器错误。看看这个here

#!/usr/bin/env python
#
# Funf: Open Sensing Framework
# Copyright (C) 2010-2011 Nadav Aharony, Wei Pan, Alex Pentland.
# Acknowledgments: Alan Gardner


from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
from SocketServer import ThreadingMixIn
import sys
import cgi
import urlparse
import os.path
import shutil
import time

server_dir = os.path.dirname(__file__)

config_path = '/config'
config_file_path = os.path.join(server_dir, 'config.json')

upload_path = '/data'
upload_dir = os.path.join(server_dir, 'uploads')

def read_config():
    config = None
    try:
        with open(config_file_path) as config_file:
            config = config_file.read()
    except IOError:
        pass
    return config

def backup_file(filepath):
    shutil.move(filepath, filepath + '.' + str(int(time.time()*1000)) + '.bak')

def write_file(filename, file):
    if not os.path.exists(upload_dir):
        os.mkdir(upload_dir)
    filepath = os.path.join(upload_dir, filename)
    if os.path.exists(filepath):
        backup_file(filepath)
    with open(filepath, 'wb') as output_file:
        while True:
            chunk = file.read(1024)
            if not chunk:
                break
            output_file.write(chunk)

class RequestHandler(BaseHTTPRequestHandler):

    def do_GET(self):
        parsed_url = urlparse.urlparse(self.path)
        if parsed_url.path == config_path:
            config = read_config()
            if config:
                self.send_response(200)
                self.end_headers()
                self.wfile.write(config)
            else:
                self.send_error(500)
        elif parsed_url.path == upload_path:
            self.send_error(405)
        else:
            self.send_error(404)

    def do_POST(self):
        parsed_url = urlparse.urlparse(self.path)
        path = parsed_url.path
        ctype, pdict = cgi.parse_header(self.headers['Content-Type']) 
        if path == upload_path:
            if ctype=='multipart/form-data':
                form = cgi.FieldStorage(self.rfile, self.headers, environ={'REQUEST_METHOD':'POST'})
                try:
                    fileitem = form["uploadedfile"]
                    if fileitem.file:
                        try:
                            write_file(fileitem.filename, fileitem.file)
                        except Exception as e:
                            print e
                            self.send_error(500)
                        else:
                            self.send_response(200)
                            self.end_headers()
                            self.wfile.write("OK")
                        return
                except KeyError:
                    pass
            # Bad request
            self.send_error(400)
        elif parsed_url.path == config_path:
            self.send_error(405)
        else:
            self.send_error(404)


class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
    """Handle requests in a separate thread."""                


if __name__ == '__main__':
    if sys.argv[1:]:
        port = int(sys.argv[1])
    else:
        port = 8000
    server_address = ('', port)
    httpd = ThreadedHTTPServer(server_address, RequestHandler)

    sa = httpd.socket.getsockname()
    print "Serving HTTP on", sa[0], "port", sa[1], "..."
    print 'use <Ctrl-C> to stop'
    httpd.serve_forever()

如果您想在 Apache 之类的东西上运行 CGI(而不是通过上面粘贴的自定义服务器代码),您可以在启用 (.py) CGI 的目录中创建一个像这样的 .py 文件。

#!/usr/bin/env python
print "Content-Type: text/html"
print
print 'Hello World'

如果您使用 Apache,这里是有关如何设置 CGI 可执行文件的一些信息.

edit:(正如 Adrien P. 所说,Python 脚本应该是可执行的。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何运行Python CGI脚本 的相关文章

随机推荐

  • 圆角、矩形按钮

    我有兴趣制作一个类似于主页上的按钮的 html 按钮https new myspace com 我知道 html 看起来像这样
  • 如何获取所有用户所有公共仓库中Github的实时推送事件?

    我看过GET events但它返回所有事件 而不仅仅是我感兴趣的推送事件 我读过有关 webhooks 的内容pushEvent特别是 但可以配置为仅存储库 以便在推送到该存储库时收到通知 但我希望获得来自所有用户的所有公共存储库中的所有推
  • WebBrowser 控件 WPF 中的脚本错误

    当我使用 wpf 处理 webBrowser 控件时出现 脚本错误 之类的错误 即使我在这里粘贴了屏幕截图 甚至一些 jquery UI 和 css 也不起作用 我也面临这个问题 我需要创建浏览器应用程序 网络上有很多 Jquery JSO
  • 为什么bottom:0 不能与position:sticky 一起使用?

    我试图了解 css 粘性 的作用 我可以让它粘在其父级的 顶部 但还没有到 底部 我的测试代码是 block background pink width 50 height 200px move position sticky bottom
  • 使用 XSD 文件生成 XML 文件

    如何从 XSD 文件生成 XML 文件 假设我们有 Test xsd 文件 如下所示
  • 未捕获的类型错误:elem.nodeName.toLowerCase 不是函数 Jquery

    我正在开发一个项目 该项目运行良好 但今天突然显示类型错误 未捕获的类型错误 elem nodeName toLowerCase 不是函数 Jquery 下面是我收到错误的代码 A method for determining if a D
  • 如何点击更改模型的颜色,然后将其改回原来的颜色?

    我正在尝试在 ARKit 中创建一个功能 如果用户点击 modelEntity 它的颜色就会更改为蓝色 这样就表明它已被选中 但是 如果用户点击另一个实体 则先前选择的实体的材质会变回选择之前的状态 所以我可以用这段代码改变它的颜色 let
  • boost RNG 的线程安全

    我有一个循环 应该通过插入一个 openmp pragma 来很好地并行化 boost normal distribution
  • MATLAB - 从 jpeg_write.c 创建 maxmaci64 时出错

    我在使用来自 jpeg 工具箱的 jpeg read c 和 jpeg write c 的 Mex 制作 mexmaci64 文件时遇到问题 我问了我的问题herejpeg read 的问题解决了 但当我编译jpeg write c时仍然有
  • 如何使用jquery Ajax函数在IE浏览器中读取xml数据

    我需要在 AJAX 函数中使用 jquery 读取 xml 数据 这在 firefox 中工作正常 但是我被 IE 浏览器困住了 我无法读取 xml 程序需要从 xml 文件中读取 proptype 我有放置警报警报 theXml 但在 I
  • 如何在循环中使用 writeHexByte 显示到屏幕上?

    我在启动时显示了 displayChar 字符 现在我如何添加 writeHexBytes 然后在循环中使用 writeHexByte 和 writeHexWord 在屏幕上显示 写入十六进制字节 需要一个 8 位寄存器 通过调用显示它 转
  • Java:查找文件的最后一行是否为空

    我有一个关于需要用 Java 完成的学校作业的问题 我需要从文件加载数据并检查这些文件中的错误 我用 a 读取了该文件bufferedReader它完美地工作到文件末尾 如果最后一行为空 它会忽略该行 我知道如何检查空行 但最后一行根本没有
  • 运行循环实际上是如何工作的

    这个月初我问了这个问题 什么是运行循环 在阅读了答案并做了一些尝试后 我让它工作了 但我仍然不完全理解它 如果运行循环只是与线程关联的循环 并且它不会在幕后生成另一个线程 那么我的线程 主线程以保持简单 中的任何其他代码如何执行而不会被 阻
  • 如何在 Spring Jms Tibjms 中在多个虚拟机之间共享发布在主题上的消息

    我的应用程序正在使用发布到主题的消息 我有 3 台服务器 我的应用程序代码正在运行 在当前的实现中 消息被分发到所有正在运行的虚拟机 即每个消费者都会收到消息的副本 我的要求是每个消费者都应该收到不同的消息 即没有两个消费者应该收到相同的消
  • 在 CSS3/HTML5 中使用自定义字体?

    我的 CSS 样式表开头有这段代码 当然链接到我的 index html font face font family Calibri src local Calibri local Calibri url fonts Calibri Bol
  • React Router 默认路由重定向到 /home

    我对反应以及我选择使用的路由器和引导程序库非常陌生 它们基本上只是react router bootstrap 我只是对事物有了一些感觉 我想制作一个具有一些基本 url 导航的网络应用程序 我有 4 个部分 主页浏览添加和关于 单击链接效
  • 将 PDF 转换为 PNG

    我正在尝试将 PDF 转换为 PNG 图像 至少是一个封面 我已经使用 pdftk 成功提取了 PDF 的第一页 我正在使用 imagemagick 进行转换 convert cover pdf cover png 这是可行的 但不幸的是
  • 在 Swift 中逐像素地对图像应用视觉效果

    我的大学任务是创建视觉效果并将其应用于通过设备摄像头捕获的视频帧 我目前可以获取图像并显示 但无法更改像素颜色值 我将示例缓冲区转换为 imageRef 变量 如果将其转换为 UIImage 一切正常 但现在我想将 imageRef 逐像素
  • Mapbox GL 3D 单体建筑高光选择

    如何将鼠标悬停在一个 3D 建筑物上时突出显示它 OSM 建筑之类的东西突出了特色 看来mapbox street v7的建筑图层要素属性太少了 只包括 拉伸 高度 最小高度 类型 地下 没有任何独特的属性来区分这座建筑 有没有办法包含建筑
  • 如何运行Python CGI脚本

    我以前从未设置过服务器 更不用说Python服务器了 我有点迷失了 我如何使用以下代码 我尝试将其放入 cgi bin 目录中 但没有成功 它返回了内部服务器错误 看看这个here usr bin env python Funf Open