Python 2.7.3 processus.Popen() échecs
Je suis à l'aide de python 2.7.3 sur un Windows 7 64-bit la machine (également dans le développement de Linux 32 bits, Ubuntu 12.04) et suis bizarre des difficultés à obtenir python pour communiquer avec l'invite de commande/terminal avec succès. Mon code ressemble à ceci:
import subprocess, logging, platform, ctypes
class someClass (object):
def runTerminalCommand:
try:
terminalOrCmdLineCommand = self.toString()
process = subprocess.Popen(terminalOrCmdLineCommand, shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
output = process.stdout.readlines()
if len(output) < 1:
logging.exception("{} error : {}".format(self.cmd,process.stderr.readlines()))
raise ConfigError("cmd issue : {}".format(self.cmd))
return output
except ValueError as err:
raise err
except Exception as e:
logging.exception("Unexpected error : " + e.message)
raise ConfigError("unexpected error")
Maintenant, je sais que l'auto.toString() valeur renvoyée sera de traiter correctement si je l'entrer à la main, je vais donc me limiter à un problème avec la façon dont je suis l'envoi à la ligne de commande via le processus secondaire. J'ai lu la documentation, et a constaté que le processus secondaire.check_call() ne retourne rien, s'il rencontre une erreur, donc je suis en utilisant .Popen()
L'exception que je reçois est,
[date & time] ERROR: Unexpected error :
Traceback (most recent call last):
File "C:\[...]"
raise ConfigError("cmd issue : {}".format(self.cmd))
"ConfigError: cmd issue : [the list self.cmd printed out]"
Ce que j'ESSAIE de faire, c'est exécuter une commande, et de lire l'entrée arrière. Mais il me semble être incapable d'automatiser l'appel, je veux courir. 🙁
Toute pensée? (s'il vous plaît laissez-moi savoir si il y a tout les détails nécessaires j'ai laissé de côté)
Beaucoup apprécié, à l'avance.
def runTerminalCommand:
J'ai donc pensé qu'il pourrait être parce que le processus de l'enfant est en cours d'exécution en parallèle au processus parent--mais il n'est pas. Lorsque j'appelle le processus.wait() avant de l'assigner en sortie une valeur, j'ai le même problème. Lorsque j'essaie de commenter le code: "processus = sous-processus.Popen(terminalOrCmdLineCommand, shell=True,stdout=sous-processus.PIPE,stderr=sous-processus.PIPE)" et son remplacement par "processus = sous-processus.check_call(de soi.cmd)" il me dit un de mes drapeaux a un paramètre non valide après. Puis il énumère les paramètres autorisés, dont l'un est celui que j'ai utilisé... Encore passer au crible de l'API
OriginalL'auteur LastTigerEyes | 2012-10-03
Vous devez vous connecter pour publier un commentaire.
Les docs disent:
Vous pouvez utiliser
.communicate()
comme suit:Voir d'autres méthodes pour obtenir des sous-processus de sortie en Python.
OriginalL'auteur jfs