什么是错误的for循环

时间:2014-08-13 14:57:41

标签: python loops for-loop subprocess stdout

我无法从这段代码中获得输出,它只是无限循环我想,它必须读取并将这些行附加到名为data的列表中,但它没有给出输出,我做错了什么? 任何建议将不胜感激,提前谢谢。

import os
import subprocess
import commands

command = ['sudo', 'iwlist', 'wlan0', 'scan']
output = subprocess.Popen(command, stdout=subprocess.PIPE).stdout.readlines()
data = []
for item in output:
      if item.strip().startswith('ESSID:'):
           data = (item.lstrip('ESSID:').rstrip('\n'))
      for item in output:
            if item.strip().startswith('Quality:'):
                 data.append('Quality:')
            for item in output:
                  if item.strip().startswith('Pairwise:'):
                       data.append('Pairwise:')
                       print data

1 个答案:

答案 0 :(得分:3)

尝试下面的代码,我认为您不需要多个for循环。

此外,命令iwlist也可以在没有sudo权限的情况下运行,因此您应该将其删除(因为您无法使用subprocess.PIPE输入sudo密码)< / p>

我还删除了虽然导入的oscommands模块未在任何地方使用。

import subprocess

command = ['iwlist', 'wlan0', 'scan']
output = subprocess.Popen(command, stdout=subprocess.PIPE).stdout.readlines()
data = []
for item in output:
    if item.strip().startswith('ESSID:'):
         data.append([item.lstrip('ESSID:').rstrip('\n')])
    if item.strip().startswith('Quality:'):
        data.append('Quality:')
    if item.strip().startswith('Pairwise:'):
        data.append('Pairwise:')
print data

<强> 修改

由于您想要阅读每个连接,请尝试使用

import subprocess

command = ['sudo', '-S', 'iwlist', 'wlan0', 'scan']
output = subprocess.Popen(command, stdout=subprocess.PIPE).stdout.read()
data = []
for cell_item in output.split("Cell"):
    data_item = []
    for line in cell_item.split("\n"):
        if any(item in line for item in ["ESSID", "Quality", "Pairwise"]):
            data_item.append(line.strip())
    if data_item:
        data.append(data_item)
print data

这里的技巧是先按单元格分割输出(根据我系统上的iwlist输出),然后在每个单元格中检查Quality, Pairwise, ESSID