2016-05-30 4 views
-2

Wie bekomme ich die Ausgabe von "service --status-all" vom Terminal und gebe sie in eine Liste ein? (Jede Liste enthält eine Zeile)Wie kann ich eine Terminalausgabe erhalten, sie in Zeilen trennen und sie in eine Liste von Listen in Python eintragen?

ich diesen Code versucht haben:

a = os.popen('service --status-all').readlines() 
    print a 
    string=str(a) 
    str=string.split('\n') 

aber es erlaubt mir nicht, die Linien aus irgendeinem Grund zu trennen. Wie kann ich das tun?

danke

+0

Es ist nicht klar, was Sie wollen. 'a' ist bereits eine Linkliste. Versuchen Sie 'für Zeile in einer: Druckzeile', um selbst zu sehen. –

+0

Die 'readlines'-Funktion trennt Ihren Eingabestrom bereits in eine' liste' von Zeilen. –

+0

Es funktioniert perfekt auf meinem System. 'a' ist eine Liste, in der jedes Element eine Zeile der Befehlsausgabe ist. Können Sie die Ausgabe dieses Programms anzeigen, das Sie erhalten (zusammen mit dem, was Sie stattdessen erwartet haben)? –

Antwort

0

Sie müssen splitlines Methode verwenden, um geteilt Ausgabe von Linien

str.splitlines ([keepends]) Gibt eine Liste der Zeilen in der Zeichenfolge, brechen an Zeilengrenzen . Diese Methode verwendet den universellen Zeilenumbruch Ansatz für das Aufteilen von Zeilen. Zeilenumbrüche sind in der Ergebnisliste nicht enthalten, es sei denn, Keepends ist gegeben und wahr.

Zum Beispiel gibt 'ab c \ n \ nde fg \ rkl \ r \ n'.splitlines() [' ab c ',' ', ' de fg ',' kl '] zurück, während das selbe ist Aufruf mit Splitlines (True) gibt ['ab c \ n', '\ n', 'de fg \', 'kl \ r \ n'] zurück.

Im Gegensatz zu split(), wenn ein Trennzeichenfolge September gegeben wird, diese Methode eine leere Liste für den leeren String zurückgibt, und einen Anschlussleitungsbruch nicht in einer zusätzlichen Zeile zur Folge haben.

Diese Methode wird Shell-Befehl und Rückgabeliste der Linien laufen:

def run_shell_command_multiline(cmd): 
     p = subprocess.Popen([cmd], stdout=subprocess.PIPE, 
          stderr=subprocess.PIPE) 
     stdout, stderr = p.communicate() 
     if p.returncode != 0: 
      raise RuntimeError("%r failed, status code %s stdout %r stderr %r" % (
       cmd, p.returncode, stdout, stderr)) 
     return stdout.splitlines() # This is the stdout from the shell command 
-1

Mit .readlines()bereits bricht die Ausgabe in Linien. Wenn Sie die zusätzlichen \n loswerden möchten, können Sie auch .strip() verwenden.

import os 

a = os.popen('service --status-all').readlines() 
output = [el.strip() for el in a] 

print(output) 

# ['first line', 'second line', 'third line'] 
Verwandte Themen