commands.getstatusoutput würde für diese Situation gut funktionieren. (Veraltet seit Python 2.6)
import commands
print(commands.getstatusoutput("cat syscall_list.txt | grep f89e7000 | awk '{print $2}'"))
os.popen funktioniert dafür. popen - öffnet eine Pipe zu oder von einem Befehl. Der Rückgabewert ist ein offenes Dateiobjekt, das mit der Pipe verbunden ist und gelesen werden kann. split('\n') konvertiert die Ausgabe in eine 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
Verwenden Sie den subprocess
Modul stattdessen:
import subprocess
output = subprocess.check_output("cat syscall_list.txt | grep f89e7000 | awk '{print $2}'", shell=True)
Bearbeiten:Dies ist neu in Python 2.7. In früheren Versionen sollte dies funktionieren (mit dem umgeschriebenen Befehl wie unten gezeigt):
import subprocess
output = subprocess.Popen(['awk', '/f89e7000/ {print $2}', 'syscall_list.txt'], stdout=subprocess.PIPE).communicate()[0]
Als Randnotiz können Sie umschreiben
cat syscall_list.txt | grep f89e7000
An
grep f89e7000 syscall_list.txt
Und Sie können sogar die gesamte Anweisung durch eine einzelne awk
ersetzen Skript:
awk '/f89e7000/ {print $2}' syscall_list.txt
Führt zu:
import subprocess
output = subprocess.check_output(['awk', '/f89e7000/ {print $2}', 'syscall_list.txt'])