2016-03-21 14 views
0

Ich habe diesen Code unten, der die Verbindungsqualität & Signalpegel der WiFi-Verbindung ausdruckt. Ich versuche, die Daten in Variablen zu speichern, damit ich weiterarbeiten kann, aber ich habe keine Ahnung, wie ich das machen soll.Speichern gedruckter Daten in Variablen

while True: 
cmd = subprocess.Popen('iwconfig %s' % args.interface, shell=True, 
         stdout=subprocess.PIPE) 
for line in cmd.stdout: 
    if 'Link Quality' in line: 
     print line.lstrip(' '), 
    elif 'Not-Associated' in line: 
     print 'No signal' 
time.sleep(1) 

Beispiel des Ausgangs

Link Quality=63/70 Signal level=-47 dBm 

Antwort

0

Statt Druck, um das Ergebnis in der Datenstruktur speichern, für examle in der Liste wie folgt vor:

while True: 
    result = [] 
    cmd = subprocess.Popen('iwconfig %s' % args.interface, shell=True, 
          stdout=subprocess.PIPE) 
    for line in cmd.stdout: 
     if 'Link Quality' in line: 
      result.append(line.lstrip()) 
     elif 'Not-Associated' in line: 
      result.append('No signal') 

    # do soemthing with `result` 
    #for line in result: 
    # line ...... 

    time.sleep(1) 
1

Sie haben zwei Möglichkeiten,

  1. Ändern Sie die vorhandene Codebasis
  2. Schreiben Sie einen Wrapper über den aktuellen ausführbaren Code

Wenn Sie Option 1 gehen, ich denke, es ist schlicht und einfach Python-Code ist.

Wenn Sie für Option 2 gehen, möchten Sie die standard output stream des vorhandenen ausführbaren Codes analysieren. So etwas wie dies funktionieren würde:

from subprocess import getstatusoutput as gso 

# gso('any shell command') 
statusCode, stdOutStream = gso('python /path/to/mymodule.py') 
if statusCode == 0: 
    # parse stdOutStream here 
else: 
    # do error handling here 

Sie können nun die stdOutStream mit mehreren String-Operationen analysieren, die nicht schwer sein sollte, wenn Ihre Ausgaben eine vorhersehbare Struktur aufweisen.

0

Sie können die Ausgabe in eine freundlichere Datenstruktur analysieren:

import re 
results = [] 
while True: 
    cmd = subprocess.Popen('iwconfig %s' % args.interface, shell=True, 
         stdout=subprocess.PIPE) 
    for line in cmd.stdout: 
     results.append(dict(re.findall(r'(.*?)=(.*?)\s+', line)) 
    time.sleep(1) 

for count,data in enumerate(results): 
    print('Run number: {}'.format(count+1)) 
    for key,value in data.iteritems(): 
     print('\t{} = {}'.format(key, value)) 
Verwandte Themen