Impossible d’exécuter un script bash à partir du serveur apache2 à l’aide de python3?

J’ai deux PC Ubuntu configurés et connectés comme indiqué, ils sont capables de se cingler les uns les autres.

PC1PC2 

PC2 a apache2 en cours d’exécution. J’ai configuré un script python comme indiqué ci-dessous pour exécuter une requête sur le serveur à l’aide de l’adresse IP de PC2.

Le script Python fonctionne bien et génère une page Web simple comme indiqué dans le script, mais au moment où je décommente la ligne

 subprocess.call("./test.sh", shell=True) 

du code pour exécuter un script bash, deux choses se produisent:

  1. Lorsque ./index.py localement sur PC2, cela fonctionne et exécute également le fichier script.

    mais…

  2. Lorsque je demande cela via PC1, l’apache2 se bloque et donne les informations suivantes dans le navigateur:

    Erreur Interne du Serveur

    Le serveur a rencontré une erreur interne ou une configuration incorrecte et n’a pas pu terminer votre demande.

    Veuillez contacter l’administrateur du serveur à l’adresse webmaster @ localhost pour les informer de l’heure à laquelle cette erreur s’est produite et des actions que vous avez effectuées juste avant cette erreur.

    Plus d’informations sur cette erreur peuvent être disponibles dans le journal du serveur.

    Apache / 2.4.7 (Ubuntu) Server sur le port 80 de localhost

Le fichier journal des erreurs présente les détails suivants:

 [Wed Feb 10 21:40:51.866832 2016] [cgi:error] [pid 9747] [client 127.0.0.1:34506] malformed header from script 'index.py': Bad header: THIS COMES FROM TEST [Wed Feb 10 21:40:51.867920 2016] [cgi:error] [pid 9747] [client 127.0.0.1:34506] AH01215: TERM environment variable not set. 

Le script Python ./index.py est le suivant:

 #!/usr/bin/python import subprocess subprocess.call("./test.sh", shell=True) # Turn on debug mode. import cgitb cgitb.enable() # Print necessary headers. print("Content-Type: text/html\n") print('') print('') print('IoT Based Elecsortingc SubStation Monitoring') print('') print('') print('
') print('

IoT Based Elecsortingc SubStation Monitoring

') print(' ') print('') print('')

Le script bash ./test.sh est le suivant:

 #!/bin/bash #echo THIS COMES FROM TEST firefox #echo STOPPPPPPPPPPPPPPPPPPPP 

Vous exécutez le script bash avant d’écrire l’en-tête du type de contenu. Faites-le dans l’autre sens.

Le script bash écrit sur la même sortie que votre script Python. La première chose que voit le serveur Apache est la sortie du script bash. Cette sortie n’est pas un en-tête HTTP valide, d’où le message d’erreur.