2013-04-29 41 views
0

我们正在尝试计数glassfish中的实例。当使用len()函数时,它总是返回1而不是0.也许它会用空格或其他东西填充列表[0]。这是我们的代码。len(列表)在Python中返回1而不是0

ssh = paramiko.SSHClient() 
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
    ssh.connect(self.get('hostname'),int(self.get('port')),self.get('username'),allow_agent=True) 
    #try: 
    stdin, stdout, stderr = ssh.exec_command('~/glassfish3/glassfish/bin/asadmin list-instances') 
    result = stdout.readlines() 
    #except Exception, e: 
    # return MonitoringResult(MonitoringResult.OK,'all instances up!') 
    result = "".join(result) 
    #line = re.compile(r'\bnot\s\D*\n') 

    #rline = "".join(line.findall((result))) 
    line2=re.compile(r'\bnot') 
    rline2 = ";".join(line2.findall((result))) 
    print(rline2) 
    i = 0 
    listr = rline2.split(";") 

    while(i < (len(listr)): 
     i+=1 
    print(i) 

    if rline2: 
     return MonitoringResult(MonitoringResult.CRITICAL,'instance down') 
    else: 
     return MonitoringResult(MonitoringResult.OK, 'All instances are up') 

回答

6

str.split的结果不能list

>>> ''.split(';') 
[''] 

如果要检查所获得的列表中是否包含any非空字符串,使用any

>>> any(''.split(';')) 
False 
>>> any('a;'.split(';')) 
True 
>>> ';'.split(';') 
['', ''] 
>>> any(';'.split(';')) 
False 

如果你想filter出空串,我们Ëfilter

>>> filter(None, ';'.split(';')) 
[] 

或列表-理解:

>>> [s for s in ';'.split(';') if s] 
[] 

我刚刚意识到str.split可以返回一个空列表。但只有时称为不带参数:

>>> ''.split() 
[] 
>>> ' '.split() #white space string 
[] 

的解释是在文档中:

S.split([sep [,maxsplit]]) -> list of strings

返回的字符串S在单词的列表,使用sep作为 分隔符字符串。如果给出maxsplit,则最多maxsplit拆分 完成。如果未指定sepNone,则任何空格 字符串都是分隔符,并且空结构字符串将从 结果中删除。

相关问题