2011-05-03 13 views
6

Estoy tratando de ejecutar un servidor CGI extremadamente simple en VMS hecho en Python.Servidor web CGI simple en Python en VMS

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

El problema que tengo es que sirve contenido estático a cabo correctamente y se trata de ejecutar el CGI (está en el lugar correcto, y Ihave utiliza esos CGI con Apache para que una parte no es definitivamente el problema) pero se cuelga en alguna parte. Es algo que no sé sobre VMS.

Cualquier puntero en la dirección correcta sería apreciado. :)

Actualización: Simplificado, necesito ejecutar un programa en VMS y obtener los resultados de ese programa de alguna manera. Cualquier referencia a ejecutar subprocesos y obtener sus resultados es suficiente para mí.

+1

Puede ser que deba publicar los registros (establezca 'debug = True' en esos servidores, si están presentes) y proporcione un enlace. Sin estos detalles, es difícil solucionarlo. –

+0

si uso telnet en el puerto y hago GET esto es lo que obtengo:% DCL-W-NOCOMD, no hay comando en línea - reingresar con el primer carácter alfabético – McKracken

Respuesta

1

¿Está utilizando el puerto de Python desde http://hg.vmspython.org/vmspython/?

Si es así, creo que this thread y this file (que aparece al poner en práctica una forma de popen2), puede tener las llaves a su salvación. Parece que hay módulos específicos de VMS (al menos vms.starlet, vms.rtl.lib, vms.dvidef, vms.clidef) en el puerto que proporciona interfaces a cosas tales como la función spawn de VMS. Sin embargo, la documentación parece ser irregular o inexistente.

+0

Gracias, esto es lo más cercano a la respuesta que estaba buscando :) – McKracken

-1

para ejecutar un subproceso y obtener su salida en 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 
>>> 

Esto es claramente en Linux, así que no estoy seguro de nada específico SLB a Python o el módulo de subproceso.

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

+0

El subproceso del módulo no está disponible en VMS. También tenedor() no está allí en absoluto. – McKracken

+0

Holy crap- si no hay os.fork(), no estoy seguro de sus opciones. Creo que fork() es la llamada subyacente para la mayoría? (¿todo?) de las funciones/módulos de creación de procesos. subproceso, multiproceso, os.spawn *, etc. ¿existe os.system()? – tMC

+0

Los subprocesos funcionan de manera bastante diferente en OpenVMS. Por el momento, no tengo acceso al compilador en la plataforma de destino, por lo que Python solo está disponible como una opción. – McKracken

0

CGIHTTPServer.py utiliza os.fork si está disponible, si no subprocess.Popen.

Consulte el código fuente del run_cgi method.

Experimente con el módulo subprocess para ver si/cómo funciona en VMS.

+0

Me encantaría experimentar con el módulo de subproceso, solo si estuviera disponible en la plataforma de destino. – McKracken

+0

¿Algo más que puedas usar? '' os.popen2/3''? – codeape

Cuestiones relacionadas