Python在VMS上的简单CGI Web服务器

6

我正在尝试在VMS上使用Python运行一个非常简单的CGI服务器。

import sys    
from BaseHTTPServer import HTTPServer
from CGIHTTPServer import CGIHTTPRequestHandler    
server_address=('',8080)
httpd = HTTPServer(server_address, CGIHTTPRequestHandler)
httpd.serve_forever()

我遇到的问题是网站可以正确地提供静态内容,但尝试执行CGI脚本时卡住了。这些CGI脚本已经被放置在正确的位置,而且我之前也在Apache上使用过,因此问题肯定不在CGI脚本本身上。这可能与VMS系统有关,但我不确定具体原因。

如果您能提供任何指向正确方向的建议,将不胜感激。:)

更新:简单来说,我需要在VMS上执行程序并以某种方式获取该程序的结果。只要提供执行子进程和获取其结果的参考资料即可。


1
也许你应该发布日志(如果有的话,在这些服务器上设置debug=True),并提供一个链接。没有这些细节,很难进行故障排除。 - Senthil Kumaran
如果我telnet到该端口并执行GET,我将得到以下内容:% DCL-W-NOCOMD, 该行上没有命令 - 请用字母字符重新输入。 - McKracken
3个回答

1

您是否正在使用http://hg.vmspython.org/vmspython/中的Python端口?

如果是这样,我认为this threadthis file(似乎实现了一种popen2形式)可能会成为您解决问题的关键。在该端口中似乎有VMS特定的模块(至少包括vms.starletvms.rtl.libvms.dvidefvms.clidef),提供与VMS的spawn函数等内容的接口。然而,文档似乎不完整或不存在。


谢谢,这是我正在寻找的答案中最接近的 :) - McKracken

0

CGIHTTPServer.py 如果可用,使用 os.fork,否则使用 subprocess.Popen

请参阅 run_cgi 方法 的源代码。

尝试使用 subprocess 模块在 VMS 上进行实验,看看它是否有效。


我很想尝试subprocess模块,但前提是它在目标平台上可用。 - McKracken
还有其他可以使用的吗?比如说"os.popen2/3"? - codeape

-1

在posix上执行子进程并获取其输出:

Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from subprocess import Popen, PIPE
>>> output = Popen(['/bin/ls', '/'], stdout = PIPE).communicate()[0]
>>> print output
bin
boot
dev
etc
home
..snip..
root
sbin
>>> 

这显然是在Linux上,所以我不确定Python或子进程模块是否有任何VMS特定的内容。

http://docs.python.org/library/subprocess.html


模块subprocess在VMS上不可用。同时,根本没有fork()。 - McKracken
天啊-如果没有os.fork(),我不确定你有什么选择。我认为fork()是大多数进程创建函数/模块的基础调用? subprocess、multiprocess、os.spawn*等。os.system()存在吗? - tMC
子进程在OpenVMS上的工作方式与其他系统有很大不同。目前我无法访问目标平台上的编译器,因此Python是唯一可行的选择。 - McKracken
你可以在命令行 Shell 中创建子进程,类似于 Bash 中的 coproc 或 & 吗? - tMC
是的,你可以从 shell 中生成一个进程。 - McKracken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接