将打印数据存储到变量中

时间:2016-03-21 05:52:34

标签: python iwconfig

我在下面的代码中打印出了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

3 个答案:

答案 0 :(得分:1)

您有两种选择,

  1. 修改现有代码库
  2. 在当前可执行代码上写一个包装器
  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,如果您的输出具有可预测的结构,那么这不应该是困难的。

答案 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))