2016-04-21 5 views
1

Es gibt einen Systembefehl, die Ausgabe wie folgt ergibt:Befehlsausgabe Parsing in python2.7

OUTPUT HDMI2 123.123.123 
(OUTPUT) * HDMI1 124.124.124 

Wie kann ich es analysieren? Ich muss analysieren, und ich brauche Daten von der Linie mit() und *, das wird verwendet. Wenn ich die In-Use-Linie habe, brauche ich den HDMI-Teil und den Nummern-Teil.

Antwort

1

Überprüfen Sie, ob die Zeile die Zeichenfolge VGA enthält, dann die Zahlen zurück:

if 'VGA' in line: 
    return line.split('VGA')[1] 

wenn "VGA" sollte Teil des Ergebnisses sein: die Zahlen wollen

if 'VGA' in line: 
    return "VGA " + line.split('VGA')[1] 

und, wenn Sie nur, einzeln:

if 'VGA' in line: 
    return map(int, line.split('VGA')[1].split('.')) 

Update: Lösung für aktualisierte Anforderungen.

die Zeile mit () und * markiert zu finden, könnte ein regulärer Ausdruck besser sein, z.B .:

for line in input_lines: 
    m = re.match(r''' 
     ^\(     # at the beginning of the line look for a (
     [A-Z]+    # then a group of upper-case letters, i.e. OUTPUT 
     \)     # followed by a) 
     \s*     # some space 
     \*     # a literal * 
     \s*     # more space 
     (?P<tag>[A-Z0-9]+) # create a named group (tag) that matches HDMI1, ie. upper case letters or numbers 
     \s*     # more space 
     (?P<nums>[\d\.]+) # followed by a sequence of numbers and . 
     $     # before reaching the end of the line 
     ''', line, re.VERBOSE) 
    if m: 
     break 
else: # note: this else goes with the for-loop 
    raise ValueError("Couldn't find a match") 
# we get here if we hit the break statement 
tag = m.groupdict()['tag'] # HDMI1 
nums = m.groupdict()['nums'] # 124.124.124 
+0

ich meine Frage bearbeitet, ich glaube, Sie es nicht verstehen, aber es ist meine Schuld. Sorry – tmsblgh

+0

Wenn Sie eine Frage zu Stack Overflow stellen, müssen Sie normalerweise (a) die Eingabe bereitstellen - was Sie getan haben, (b) die erwartete Ausgabe und (c) den Code, den Sie versucht haben. Im Moment bin ich unsicher, ob Sie '123.123.123' zurückgeben wollen oder' 124.124.124'? – thebjorn

+0

Ich habe diese zwei Zeilen, diese Zeile ist die Ausgabe eines Systembefehls. Ich muss es analysieren und dann brauche ich die Daten dieser Zeile, was aktiv ist. Die aktive Zeile ist immer mit * und() markiert. Der Ausgang, was ich will, ist dies: "HDM1" oder "124.124.124" – tmsblgh