python - for 循环有什么问题

标签 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

最佳答案

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

此外,命令 iwlist无需sudo即可工作权限也是如此,所以你应该将其删除(因为你将无法使用 subprocess.PIPE 输入 sudo 密码)

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

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 .

关于python - for 循环有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25289529/

相关文章:

python - 属性(property)装饰师

python - Keras load_model() 仅在 Flask 请求上下文中失败

列表的 Pythonic 操作

c# - 如果需要很多时间,请跳到下一次迭代 c#

loops - 在 SAS 中使用 proc sql 通过数组进行简单迭代

java - 为什么使用双重的for循环无法终止

loops - for 循环语法,其中包含 if 语句

python - 根据组最大值在 DataFrame 列中分配新值

loops - 如何在 Postman 中使用不同的客户对象数据循环 JSON 请求?

java - 数组中有多少个不同的值