J'ai un script Python qui a besoin d'émettre un certain nombre de commandes shell. Je pensais pouvoir créer un objet de sous-processus et le réutiliser chaque fois que j'avais une commande à exécuter.Réutiliser objet subprocess
Voilà comment j'ai mon code mis en place:
def setupPipeline(self):
setupShell = subprocess.Popen([''], stdout=subprocess.PIPE, shell=True, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
# Stop running pipeline
setupShell.stdin.write('stop ' + self.Name)
output = setupShell.stdout.read()
print output
# Cancel any running jobs and cleanup variables
setupShell.stdin.write('sudo -u pr cancel ALL')
output = setupShell.stdout.read()
print output
setupShell.stdin.write('sudo -u pr clean ALL')
output = setupShell.stdout.read()
print output
(sauter beaucoup d'autres code ici)
if __name__ == '__main__':
#self-test code
pipelineObj = Pipeline(sys.argv)
pipelineObj.setupPipeline()
Cependant, lorsque le code arrive à la deuxième commande je reçois un Comment puis-je procéder à la réutilisation d'un objet de sous-processus pour émettre des commandes qui doivent toutes s'exécuter dans le même interpréteur? Ces commandes ne peuvent pas être simplement chaînées car il y a un traitement entre chaque appel.
(a) pourquoi vous devez réutiliser la même coquille à plusieurs reprises? (b) Pourquoi devez-vous utiliser une coquille? Vous pouvez simplement [exécuter ces commandes directement en utilisant un tableau pour fendit commande de l'argument] (http://docs.python.org/library/subprocess.html#subprocess.Popen) - et être sûr que le 'path' ni Les variables d'environnement 'IFS' influenceront l'exécution de votre programme. – sarnold
Parce que les résultats de chaque commande doivent affecter l'environnement shell des commandes suivantes. –