Simple CGI web server in Python on VMS

967 views Asked by At

I am trying to run an extremely simple CGI server on VMS done in python.

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

The problem I have is that it serves out static content properly and it tries to execute the CGI-s (it is in the right place, and Ihave used those CGIs with Apache so that part is definitely not the issue) but it hangs somewhere. It is something I don't know about VMS.

Any pointer to the right direction would be appreciated. :)

Update: Simplified, I need to execute a program on VMS and get the results of that program somehow. Any reference to executing subprocesses and getting their results is enough for me.

3

There are 3 answers

1
Nicholas Knight On BEST ANSWER

Are you using the Python port from http://hg.vmspython.org/vmspython/ ?

If so, I think this thread, and this file (which appears to implement a form of popen2), may hold the keys to your salvation. There appear to be VMS-specific modules (at least vms.starlet, vms.rtl.lib, vms.dvidef, vms.clidef) in the port that provide interfaces to such things as VMS's spawn function. Documentation seems to be spotty or nonexistent, however.

5
tMC On

To execute a subprocess and get its output on 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
>>> 

This is clearly on Linux, so I'm not sure of any VMS specifics to Python or the subprocess module.

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

2
codeape On

CGIHTTPServer.py uses os.fork if available, subprocess.Popen if not.

See the source code of the run_cgi method.

Experiment withe the subprocess module to see if/how it works on VMS.