Semplice server Web CGI in Python su VM
Domanda
Sto cercando di eseguire un server CGI estremamente semplice su VM fatta in Python.
import sys
from BaseHTTPServer import HTTPServer
from CGIHTTPServer import CGIHTTPRequestHandler
server_address=('',8080)
httpd = HTTPServer(server_address, CGIHTTPRequestHandler)
httpd.serve_forever()
Il problema che ho è che serve il contenuto statico correttamente e cerca di eseguire il CGI-S (è nel posto giusto e ho usato quei CGI con Apache in modo che la parte non sia assolutamente il problema) ma si blocca da qualche parte. È qualcosa che non so delle VM.
Qualsiasi puntatore alla giusta direzione sarebbe apprezzato. :)
AGGIORNAMENTO: semplificato, devo eseguire un programma sulle VM e ottenere in qualche modo i risultati di quel programma. Qualsiasi riferimento all'esecuzione dei sottoprocessi e ottenere i loro risultati è sufficiente per me.
Soluzione
Stai usando la porta Python da http://hg.vmspython.org/vmspython/ ?
Se è così, penso questo thread, e questa vita (che sembra implementare una forma di popen2
), può contenere le chiavi della salvezza. Sembrano esserci moduli specifici per VMS (almeno vms.starlet
, vms.rtl.lib
, vms.dvidef
, vms.clidef
) nella porta che forniscono interfacce a cose come VM spawn
funzione. La documentazione sembra essere perfetta o inesistente, tuttavia.
Altri suggerimenti
CGIHTTPServer.py
usi os.fork
se disponibile, subprocess.Popen
altrimenti.
Vedere il codice sorgente del run_cgi
metodo.
Sperimentare con il subprocess
Modulo per vedere se/come funziona sulle macchine virtuali.
Per eseguire un sottoprocesso e ottenere il suo output su 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
>>>
Questo è chiaramente su Linux, quindi non sono sicuro di alcuna specifica VMS a Python o al modulo di sottoprocesso.