Хранение напечатанных данных в переменных
У меня есть этот код ниже, который распечатывает качество соединения и уровень сигнала соединения WiFi. Я пытаюсь сохранить данные, полученные в переменные, чтобы я мог обрабатывать дальше, но я застрял, не зная, как это сделать.
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)
Пример вывода
Link Quality=63/70 Signal level=-47 dBm
3 ответа
У вас есть два варианта,
- Изменить существующую кодовую базу
- Написать обертку над текущим исполняемым кодом
Если вы выберете вариант 1, я думаю, это простой и понятный код Python.
Если вы выберете вариант 2, вы захотите разобрать standard output stream
существующего исполняемого кода. Примерно так будет работать:
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
Теперь вы можете разобрать stdOutStream
использование нескольких строковых операций, которые не должны быть сложными, если ваши выходные данные имеют предсказуемую структуру.
Вместо печати сохраните результат в структуре данных, например, в виде списка:
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)
Вы можете проанализировать вывод в более удобную структуру данных:
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))