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?
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'])
commandes.getstatusoutput fonctionnerait bien pour cette situation.
import commands
print(commands.getstatusoutput("cat syscall_list.txt | grep f89e7000 | awk '{print }'"))
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.