web-dev-qa-db-fra.com

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ée dans une variable, mais je n'ai pas pu le faire fonctionner. J'ai essayé comme:

import os    

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

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

22
user567879

Utilisez plutôt le module subprocess :

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

Edit: c'est nouveau dans Python 2.7. Dans les versions précédentes, cela devrait fonctionner (avec la commande réécrite comme indiqué ci-dessous):

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

En remarque, vous pouvez réécrire

cat syscall_list.txt | grep f89e7000

À

grep f89e7000 syscall_list.txt

Et vous pouvez même remplacer l'intégralité de l'instruction par un seul script awk:

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

Menant à:

import subprocess
output = subprocess.check_output(['awk', '/f89e7000/ {print $2}', 'syscall_list.txt'])
40
Rob Wouters

commands.getstatusoutput fonctionnerait bien pour cette situation. (Obsolète depuis Python 2.6)

import commands
print(commands.getstatusoutput("cat syscall_list.txt | grep f89e7000 | awk '{print $2}'"))
11
enderskill

os.popen fonctionne pour cela. popen - ouvre un canal vers ou depuis la commande. La valeur de retour est un objet fichier ouvert connecté au tuyau, qui peut être lu. split ('\ n') convertit la sortie en liste

import os
list_of_ls = os.popen("ls").read().split('\n')
print list_of_ls
import os
list_of_call = os.popen("cat syscall_list.txt | grep f89e7000 | awk '{print $2}'").read().split('\n')
print list_of_call

Dans python 3 vous pouvez utiliser

import subprocess as sp
output = sp.getoutput('whoami --version')
print (output)

``
0
Prakash D