6

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

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

我遇到的问题是它正确地提供静态内容并尝试执行 CGI-s(它在正确的位置,并且我已经将这些 CGI 与 Apache 一起使用,因此这部分绝对不是问题)但它挂在某个地方。这是我对VMS一无所知的事情。

任何指向正确方向的指针将不胜感激。:)

更新:简化,我需要在 VMS 上执行一个程序并以某种方式获取该程序的结果。对执行子流程并获得结果的任何参考对我来说就足够了。

4

3 回答 3

1

您是否使用来自http://hg.vmspython.org/vmspython/的 Python 端口?

如果是这样,我认为这个线程这个文件(它似乎实现了一种形式popen2)可能是你得救的关键。端口中似乎有特定于 VMS 的模块(至少vms.starletvms.rtl.libvms.dvidefvms.clidef)为诸如 VMSspawn功能之类的事物提供接口。然而,文档似乎参差不齐或根本不存在。

于 2011-05-30T14:14:01.693 回答
0

CGIHTTPServer.pyos.fork如果可用,则使用,subprocess.Popen如果没有。

run_cgi请参阅方法的源代码。

试用该subprocess模块以查看它是否/如何在 VMS 上工作。

于 2011-05-30T10:49:04.500 回答
-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

于 2011-05-25T13:07:10.673 回答