我无法从这段代码中获得输出,我猜它只是无限循环,它必须读取行并将这些行附加到名为 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/