J'ai un script simple que j'utilise pour automatiser les appels CLI à notre logiciel (Moab Workload Manager) en test, pour éviter d'avoir à utiliser l'indicateur '--xml' pour obtenir la sortie xml et puis passez-le à travers bien rangé afin qu'il soit facilement lisible. Il utilise un appel subprocess.Popen
pour exécuter la commande, puis utilise str.strip()
et str.replace()
pour effectuer un nettoyage mineur sur le fichier XML renvoyé afin de faciliter l'inspection visuelle. Le code en question est ici:Python 3 erreur de sortie sous-processus.PIPE
cmdString = "%s --xml" % cmd
cmdList = cmdString.split()
cmdRun = subprocess.Popen(cmdList,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
crOut,crErr = cmdRun.communicate()
xmlOutput = crOut.strip().replace("><",">\n<").replace("\" ","\"\n")
Quand je lance ce (j'ai récemment amélioré mon Python à Python 3.1.2) Je reçois maintenant l'erreur suivante:
Traceback (most recent call last):
File "/usr/local/bin/xmlcmd", line 50, in <module>
runXMLCmd(getCmd())
File "/usr/local/bin/xmlcmd", line 45, in runXMLCmd
xmlOutput = crOut.strip().replace("><",">\n<")
TypeError: expected an object with the buffer interface
Il semble que l'appel de communiquent() renvoie des tableaux d'octets, mais dans l'interpréteur python, si je le fais, je peux le faire avec
dir(bytes)
. toujours voir les fonctions strip() et replace(). Quelqu'un sait-il comment faire ça?
Merci.