2017-04-05 2 views
0

ich bestimmte Daten aus OSX Befehlsausgabe erhalten werden, Probe -erhalten spezifische Daten von Befehlsausgabe

enter image description here

Mein Code:

import os 
import json 
import plistlib 
import subprocess 
import datetime 

def _LogicalDrive(): 

    tmp_l = [] 

    output = subprocess.Popen(
     "diskutil info -all", shell=True, 
     stdout=subprocess.PIPE).stdout.read().splitlines() 

    for x in output: 
     if 'Device Identifier' in x: 
      tmp_dict['Identifier'] = x.split(' ')[-1].strip() 
     tmp_l.append(tmp_dict)  
    return tmp_l 
print _LogicalDrive() 

Ich möchte Daten aus bestimmten Schlüssel zu erhalten, wie "Geräte-/Medienname" oder andere.

+0

Und was funktioniert nicht in Ihrem Code? Was ist die Ausgabe, die Sie bekommen? Was wird stattdessen erwartet? –

+0

das Ausgabebild ist "https://i.stack.imgur.com/ZNM1b.png" – DKmolko

+0

Mein Code wird alle Elemente nicht bekommen, was ich will – DKmolko

Antwort

0

Ich denke, Sie versuchen, die Befehlsausgabe zu analysieren und zu analysieren. Es ist gut, dass Sie es in einzelne Zeilen zerlegen. Vielleicht teilen Sie es in jeder Zeile weiter mit dem Muster ": \ s +" und speichern den linken Teil des Doppelpunkts als Schlüssel und den rechten Teil als Wert (vielleicht in einem Wörterbuch). Sie können dieses Wörterbuch verwenden, um mit dem Schlüssel (linker Teil des Doppelpunkts) abzufragen, um den Wert zu erhalten.

Wenn Sie das Splittermuster mit ": \ s +" speichern, können Sie es erneut verwenden. Fügen Sie vielleicht ein weiteres Argument hinzu, wo ein Schlüssel angegeben werden muss.

+0

Kannst du Beispielcode geben? Ich bin arm über Formatdaten von Python – DKmolko

0

Sie können über die Ausgabe iterieren und jede Zeile über : aufteilen, wobei Sie den linken Teil als Schlüssel und rechts als Wert nehmen.

def _LogicalDrive(): 

    tmp_l = [] 

    output = subprocess.Popen(
     "diskutil info -all", shell=True, 
     stdout=subprocess.PIPE).stdout.read() 

    for x in output.splitlines(): 
     try: 
      key, value = [c.strip() for c in x.split(':') if ':' in x] 
     except ValueError: 
      continue 
     if 'Device Identifier' in x: 
      tmp_dict['Identifier'] = value 
     tmp_l.append(tmp_dict) 

    return tmp_l 
+0

Etwas ist falsch: "Schlüssel, Wert = [c.strip() für c in x.split (':')]", ValueError: mehr als 1 Wert zum Entpacken benötigt – DKmolko

+0

Meine Antwort darauf aktualisiert. Kümmerte sich nicht um Leerzeilen. –

+0

Es tut mir leid, aber "ValueError: mehr als 0 Werte zum Entpacken" erschien ..... – DKmolko

Verwandte Themen