我无法从这段代码中获得输出,它只是无限循环我想,它必须读取并将这些行附加到名为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
答案 0 :(得分:3)
尝试下面的代码,我认为您不需要多个for
循环。
此外,命令iwlist
也可以在没有sudo
权限的情况下运行,因此您应该将其删除(因为您无法使用subprocess.PIPE
输入sudo密码)< / p>
我还删除了虽然导入的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
。