2016-04-05 9 views
0

Guten Abend/Morgen, in einer Datei zu speichernlesen Ergebnisse von Terminal-Befehl, ohne zuerst in Python

Ich habe in einem Python-Programm eine Menge Befehle an das Terminal vorbei und frage mich, ob es eine Möglichkeit des Führens war ein Befehl, der die gedruckten Informationen sofort speichert, ohne sie zuerst in einer Datei speichern und dann einlesen zu müssen?

Zum Beispiel ist es das, was ich zu tun ist:

os.system("lspci -tv > results") 
if Addresses[i-1] in open('results').read(): 

Gibt es eine Möglichkeit, nur die Ergebnisse von lspci -tv zu einer Variablen speichern in meinem Programm so mein Programm auf einem anderen abhängig ist Datei und überflutet meinen Computer mit Dateien jedes Mal, wenn ich diese Methode verwenden muss?

Vielen Dank im Voraus.

Antwort

0

Ja, Sie können nach mit this question:

import subprocess 

proc = subprocess.Popen('ls', shell=True, stdout=subprocess.PIPE) 
output = proc.stdout.read() 

print output 

Oder wenn Sie ein Array mit den Ergebnissen:

import subprocess 

proc = subprocess.Popen('ls', shell=True, stdout=subprocess.PIPE) 
output = proc.stdout.read() 
array = output.split("\n")[:-1] 

for i in range(len(array)): 
    print str(i) + " : " + array[i] 

Docs here.

+0

Ich bin schon früher darauf gestoßen und habe es benutzt, obwohl die Funktionalität begrenzt scheint. Wenn ich zum Beispiel: "lspci -vvv" oder "lspci -tv" ausführen möchte, wie ich bereits erwähnt habe, wird eine Fehlermeldung ausgegeben: Traceback (letzter Aufruf zuletzt): Datei "stdout.py", Zeile 3, in proc = subprocess.Popen ('lspci -TV' stdout = subprocess.PIPE) File "/usr/lib/python2.7/subprocess.py", Linie 710, in __init__ errread, errwrite) File " /usr/lib/python2.7/subprocess.py ", Zeile 1327, in _execute_child raise child_exception OSError: [Errno 2] Keine solche Datei oder Verzeichnis –

+0

Versuchen Sie Shell = True vor stdout = subprocess.PIPE (sieht die Bearbeitung) – xdola

+0

Danke, das hat den Trick gemacht. Sie haben mir viel Zeit ersparen, da es so viele Variationen dieses Codes gibt. –