2011-05-03 98 views
6

我想在Python中完成VMS上运行一个非常简单的CGI服务器。简单的CGI网络服务器在VMS上的Python

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

我的问题是,它正确地提供了静态内容和它试图执行的CGI(这是在正确的位置,并使用IHAVE用Apache的CGI程序,使一部分肯定是不问题),但它挂在某个地方。这是我不了解的VMS。

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

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

+1

可能你应该发布日志(在这些服务器中设置'debug = True',如果存在的话)并给出一个链接。没有这些细节,很难排除故障。 – 2011-05-03 01:26:34

+0

如果我telnet到端口,并做GET这是我得到的:%DCL-W-NOCOMD,没有命令在线 - 重新输入字母的第一个字符 – McKracken 2011-05-05 15:59:23

回答

1

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

如果是这样,我认为this threadthis file(它似乎实现了一种形式popen2),可能会保存你的救赎的关键。似乎VMS特定模块(至少有vms.starlet,vms.rtl.lib,vms.dvidef,vms.clidef)位于提供VMS的spawn函数接口的端口。但是,文档似乎很缺乏或不存在。

+0

谢谢,这是最接近我正在寻找的答案:) – McKracken 2011-05-30 22:10:18

-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上,所以我不知道任何细节VMS到Python或子模块。

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

+0

模块子进程不可用于VMS。另外fork()根本就不存在。 – McKracken 2011-05-25 14:29:48

+0

神圣的废话 - 如果没有os.fork(),我不确定你的选择。我认为fork()是最基本的调用? (全部?)过程创建功能/模块。子进程,多进程,os.spawn *等os.system()存在吗? – tMC 2011-05-25 14:49:07

+0

子过程在OpenVMS上的工作方式完全不同。目前,我无法访问目标平台上的编译器,因此Python只有可用的理智选项。 – McKracken 2011-05-25 14:56:49

0

CGIHTTPServer.py使用os.fork如果有的话,subprocess.Popen如果不是。

请参阅run_cgi method的源代码。

使用subprocess模块进行实验,查看它是否/如何在VMS上工作。

+0

我很想尝试子流程模块,只有当它在目标平台上可用时。 – McKracken 2011-05-30 11:16:51

+0

还有什么您可以使用的? ''os.popen2/3''? – codeape 2011-05-30 11:59:57