commandes.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}'"))
os.popen fonctionne pour cela. popen - ouvre un tube vers ou depuis la commande. La valeur de retour est un objet fichier ouvert connecté au tube, 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
Utilisez le subprocess
module à la place :
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 antérieures, 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 la déclaration entière par un seul awk
script :
awk '/f89e7000/ {print $2}' syscall_list.txt
Mène à :
import subprocess
output = subprocess.check_output(['awk', '/f89e7000/ {print $2}', 'syscall_list.txt'])