2011-05-03 3 views
6

J'essaie d'exécuter un serveur CGI extrêmement simple sur VMS en python.Serveur web CGI simple en Python sur VMS

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

Le problème que j'ai est qu'il sert à contenu statique correctement et il tente d'exécuter les CGIs (il est au bon endroit et Ihave utilisé avec Apache ces CGIs de sorte qu'une partie est certainement pas la problème) mais il se bloque quelque part. C'est quelque chose que je ne connais pas sur VMS.

Tout pointeur vers la bonne direction serait apprécié. :)

Mise à jour: Simplifié, j'ai besoin d'exécuter un programme sur VMS et obtenir les résultats de ce programme en quelque sorte. Toute référence à l'exécution de sous-processus et à l'obtention de leurs résultats me suffit.

+1

Peut-être que vous devriez publier les journaux (mettre 'debug = True' dans ces serveurs, le cas échéant) et donner un lien. Sans ces détails, il est difficile de résoudre les problèmes. –

+0

si telnet sur le port et faire GET c'est ce que je reçois:% DCL-W-NOCOMD, aucune commande en ligne - entrer de nouveau avec le premier caractère alphabétique – McKracken

Répondre

1

Utilisez-vous le port Python de http://hg.vmspython.org/vmspython/? Si oui, je pense this thread, et this file (qui semble implémenter une forme de popen2), peut détenir les clés de votre salut. Il semble y avoir des modules spécifiques VMS (au moins vms.starlet, vms.rtl.lib, vms.dvidef, vms.clidef) dans le port qui fournissent des interfaces à des choses telles que la fonction spawn de VMS. La documentation semble être inégale ou inexistante, cependant.

+0

Merci, c'est le plus proche de la réponse que je cherchais :) – McKracken

-1

Pour exécuter un sous-processus et obtenir sa sortie sur 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 
>>> 

Ceci est clairement sous Linux, donc je ne suis pas sûr d'aucune précision VMS à Python ou le module de sous-processus.

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

+0

Sous-processus du module n'est pas disponible sur VMS. De plus fork() n'est pas du tout là. – McKracken

+0

Sacré merde - s'il n'y a pas os.fork(), je ne suis pas sûr de vos options. Je pense que fork() est l'appel sous-jacent pour la plupart? (tous?) des fonctions/modules de création de processus. sous-processus, multiprocessus, os.spawn *, etc. os.system() existe-t-il? – tMC

+0

Les sous-processus fonctionnent différemment sur OpenVMS. Pour l'instant je n'ai pas accès au compilateur sur la plate-forme cible, donc Python est seulement une option saine disponible. – McKracken

0

CGIHTTPServer.py utilise os.fork si elle est disponible, sinon subprocess.Popen. Voir le code source du run_cgi method.

Expérimentez avec le module subprocess pour voir si/comment cela fonctionne sur VMS.

+0

J'aimerais expérimenter avec le module de sous-processus, seulement s'il était disponible sur la plate-forme cible. – McKracken

+0

Autre chose que vous pouvez utiliser? '' os.popen2/3''? – codeape