2011-10-02 4 views
0

J'essaie de comparer deux chaînes lors de la recherche de groupes WSUS à mettre à jour. Cependant, ma comparaison échoue même si elles semblent être les mêmes visuellement, et sont du même type. Puisqu'il s'agit d'IronPython, je n'ai pas de débogueur disponible à Komodo (quelqu'un en connaît un pour IP?)Comparaison de chaînes dans IronPython

De toute façon, quelqu'un peut-il repérer ce que je fais mal?

#---------------------------------------------------------------------- 
# Search for a matching patch group, and approve them. 
#---------------------------------------------------------------------- 
def WSUSApprove(apprvGrpName): 
    clr.AddReference('Microsoft.UpdateServices.Administration') 
    import Microsoft.UpdateServices.Administration 

    wsus = Microsoft.UpdateServices.Administration.AdminProxy.GetUpdateServer('wsus01',False,8530) 

    parentGroupCollection = wsus.GetComputerTargetGroups() 
    for computerTarget in parentGroupCollection: 
     if computerTarget.Name.ToString() == 'Servers': 
      parent = computerTarget 
      childGroupCollection = parent.GetChildTargetGroups() 
      for computerTarget in childGroupCollection: 
       print type(computerTarget.Name.ToString()) 
       print type(apprvGrpName) 
       if apprvGrpName == computerTarget.Name.ToString(): 
        print 'success', computerTarget.Name.ToString() 
       else: 
        print 'a', computerTarget.Name.ToString() 
        print 'b', apprvGrpName 

#--output that should be equal--# 

<type 'str'> 
<type 'str'> 
a 3 Tuesday 
b 3 Tuesday 
+0

Il montre un '\ n sur l'un d'entre eux !! Merci de votre aide. Duh. – EdgeCase

+0

Je vais passer à une réponse. S'il vous plaît n'oubliez pas d'accepter les réponses à vos questions (vous n'avez pas à vos deux premiers). – agf

Répondre

1

sur Python 2.x, Utiliser repr() pour voir visuellement si deux chaînes sont les mêmes. print appelle essentiellement str, donc vous ne pouvez pas voir les caractères non imprimables et il est difficile de voir les différences dans les espaces.

Alors, faites:

print repr(computerTarget.Name.ToString()) 
print repr(apprvGrpName) 

pour savoir pourquoi ils ne sont pas équivalents.

Voir le commentaire de John Manchin pour savoir quoi utiliser sur Python 3.x, où repr() n'échappe pas aux caractères Unicode.

+1

Avec Python 3.x, utilisez 'ascii()'. Le Python 3.x 'repr()' ne représente pas les caractères non-ASCII avec des séquences d'échappement, laissant une grande marge d'ambiguïté. –

+0

n'a pas d'importance si c'est une question Python 1.x, ne dites pas "toujours". –

0

Il est probable que l'une de vos chaînes comporte un caractère d'espacement arrière, tel qu'un saut de ligne, un retour chariot ou un espace.

+1

Oui, il le sait, parce qu'il a utilisé 'repr' après que je lui ai conseillé de. Voir les commentaires sur la question. – agf