Comment stocker le résultat d'une commande shell exécutée dans une variable en python?

j'ai besoin de stocker le résultat d'une commande shell que j'ai exécuté dans une variable. Mais je ne pouvais obtenir. J'ai essayé de la forme:

call=os.system("cat syscall_list.txt | grep f89e7000 | awk '{print }'")
print call

mais il imprime le résultat dans le terminal et imprime la valeur de l'appel comme zéro, indiquant probablement comme succès. Comment obtenir le résultat stocké dans une variable?

17
demandé sur user567879 2011-12-28 21:39:18

3 réponses

subprocess module:

import subprocess
output = subprocess.check_output("cat syscall_list.txt | grep f89e7000 | awk '{print }'", shell=True)

Edit: c'est nouveau en python 2.7. Dans les versions précédentes, Cela devrait fonctionner (avec la commande réécrite comme suit):

import subprocess
output = subprocess.Popen(['awk', '/f89e7000/ {print }', 'syscall_list.txt'], stdout=subprocess.PIPE).communicate()[0]

en tant que note d'accompagnement, vous pouvez réécrire

cat syscall_list.txt | grep f89e7000

grep f89e7000 syscall_list.txt

et vous pouvez même remplacer la déclaration entière par un simple awk script:

awk '/f89e7000/ {print }' syscall_list.txt

menant à:

import subprocess
output = subprocess.check_output(['awk', '/f89e7000/ {print }', 'syscall_list.txt'])
33
répondu Rob Wouters 2011-12-28 17:56:48

commandes.getstatusoutput fonctionnerait bien pour cette situation.

import commands
print(commands.getstatusoutput("cat syscall_list.txt | grep f89e7000 | awk '{print }'"))
9
répondu enderskill 2011-12-28 17:42:17

toutes les autres réponses ici sont de bonnes réponses. Dans de nombreuses situations, vous devez exécuter des commandes externes.

Cet exemple spécifique a une autre option: vous pouvez lire le fichier, le traiter ligne par ligne, et faire quelque chose à la sortie.

bien que cette réponse ne fonctionne pas pour la "question plus générale qui est posée", je pense qu'elle devrait toujours être considérée. Ce n'est pas toujours la "bonne réponse", même dans la mesure du possible. Se souvenir de ceci (plus facile), et savoir quand (pas) l'appliquer (plus difficile), vous fera un meilleur programmeur.

0
répondu AMADANON Inc. 2016-10-13 20:58:32