2017-08-27 41 views
-2

我正在使用python 2.7。我正在运行一个使用python的linux命令,它打印出可用的wifi ssid。我需要比较我尝试连接的ssid是否可用。我使用下面的命令打印SSID:如何比较python中的字符串

import commands 
ret = commands.getstatusoutput("sudo iwlist wlan0 scan | grep ESSID") 
print(ret) 

#output:  
(0, ESSID="SSID1"\n 
    ESSID="SSID2"\n 
    ESSID="SSID3") 

如果我打印print(ret[1])然后它给了以下的输出:

ESSID="SSID1" 
    ESSID="SSID2" 
    ESSID="SSID3" 

比方说,我试图连接到SSID2,我怎样才能把这个在这种情况下检查SSID2目前是否可用。像if ret[1] == "SSID2"。我是python编程新手。

由于

+1

你试过了吗?如果ret [1] ==“SSID2”'? – khelwood

+0

@ khelwood不,我不认为它会起作用,因为ret [1]也有其他文字。 –

+0

看,如果有2个可能的情况。对或错。如果是其他文本,则块不会被执行 – Prajwal

回答

4

ret[1]是换行分隔的字符串。每行有一个等号。当"SSID2"出现在任何等号的右侧时,您需要一个表达式,其值为True

data = '''\ 
ESSID="SSID1" 
ESSID="SSID2" 
ESSID="SSID3"''' 
if any(x.split('=')[1][1:-1]=="SSID2" for x in data.splitlines()): 
    print("yes") 

data.splitlines()返回data行(你可以使用ret[1]本)的序列。对于每行x,x.split('=')返回一个列表,其中第一个元素是等号左边的字符串,第二个元素是右边的那个字符串。所以x.split('=')[1]是右边,x.split('=')[1][1:-1]删除第一个和最后一个(引号)字符。

这被封装在一个生成器表达式中,该生成器表达式为内置的any函数生成一系列参数,一旦遇到一个计算结果为true的参数,该函数就会返回True

-4
if "SSID2" in "ret[1].split("\n")[1]": 
    print "yes" 
+1

这只有在您正在查找的SSID恰好是列表中的第二个时才会有效。 –