Servidor web CGI simple en Python en máquinas virtuales
Pregunta
Estoy tratando de ejecutar un servidor CGI extremadamente simple en máquinas virtuales realizadas en Python.
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 correctamente e intenta ejecutar el CGI-S (está en el lugar correcto, y ha usado esos CGI con Apache para que esa parte definitivamente no sea el problema) pero cuelga en algún lugar. Es algo que no sé sobre máquinas virtuales.
Se agradecería cualquier puntero a la dirección correcta. :)
ACTUALIZACIÓN: Simplificado, necesito ejecutar un programa en máquinas virtuales y obtener los resultados de ese programa de alguna manera. Cualquier referencia para ejecutar subprocesos y obtener sus resultados es suficiente para mí.
Solución
¿Estás usando el puerto de Python desde http://hg.vmspython.org/vmspython/ ?
Si es así, creo este hilo, y Este archivo (que parece implementar una forma de popen2
), puede contener las llaves de su salvación. Parece haber módulos específicos de máquinas virtuales (al menos vms.starlet
, vms.rtl.lib
, vms.dvidef
, vms.clidef
) en el puerto que proporciona interfaces a cosas como las máquinas virtuales spawn
función. Sin embargo, la documentación parece ser irregular o inexistente.
Otros consejos
CGIHTTPServer.py
usos os.fork
si está disponible, subprocess.Popen
que no.
Ver el código fuente del run_cgi
método.
Experimentar con el subprocess
Módulo para ver si/cómo funciona en máquinas virtuales.
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 está claramente en Linux, por lo que no estoy seguro de ningún detalle de máquinas virtuales para Python o el módulo de subprocesos.