commands.getstatusoutput by v této situaci fungoval dobře. (Zastaralé od Pythonu 2.6)
import commands
print(commands.getstatusoutput("cat syscall_list.txt | grep f89e7000 | awk '{print $2}'"))
os.popen na to funguje. popen - otevře roura do nebo z příkazu. Návratová hodnota je otevřený souborový objekt připojený k rouře, který lze číst. split('\n') převede výstup na seznam
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
Použijte subprocess
modul místo toho:
import subprocess
output = subprocess.check_output("cat syscall_list.txt | grep f89e7000 | awk '{print $2}'", shell=True)
Edit:toto je novinka v Pythonu 2.7. V dřívějších verzích by to mělo fungovat (s příkazem přepsaným, jak je uvedeno níže):
import subprocess
output = subprocess.Popen(['awk', '/f89e7000/ {print $2}', 'syscall_list.txt'], stdout=subprocess.PIPE).communicate()[0]
Jako vedlejší poznámku můžete přepsat
cat syscall_list.txt | grep f89e7000
Komu
grep f89e7000 syscall_list.txt
A dokonce můžete celý příkaz nahradit jedním awk
skript:
awk '/f89e7000/ {print $2}' syscall_list.txt
Vede k:
import subprocess
output = subprocess.check_output(['awk', '/f89e7000/ {print $2}', 'syscall_list.txt'])