我在下面的代码中打印出了Link Quality& amp; 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
答案 0 :(得分:1)
您有两种选择,
如果你选择选项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
,如果您的输出具有可预测的结构,那么这不应该是困难的。
答案 1 :(得分:0)
而不是打印,将结果保存到数据结构中,以便列表如下:
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)
答案 2 :(得分:0)
您可以将输出解析为更友好的数据结构:
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))