2010-03-25 8 views
4

J'ai une fonction python qui fait un appel de sous-processus à un script shell qui affiche 'true' ou 'false'. Je stocke la sortie de subprocess.communicate() et essaye de faire return output == 'true' mais il renvoie False chaque fois. Je ne suis pas trop familier avec python, mais la lecture sur les comparaisons de chaînes indique que vous pouvez comparer les chaînes en utilisant ==, =, etc.Comparaison de chaînes Python

Voici le code:

def verifydeployment(application): 
    from subprocess import Popen, PIPE 
    import socket, time 

    # Loop until jboss is up. After 90 seconds the script stops looping; this 
    # causes twiddle to be unsuccessful and deployment is considered 'failed'. 
    begin = time.time() 
    while True: 
     try: 
      socket.create_connection(('localhost', 8080)) 
      break 
     except socket.error, msg: 
      if (time.time() - begin) > 90: 
       break 
      else: 
       continue 

    time.sleep(15) # sleep for 15 seconds to allow JMX to initialize 

    twiddle = os.path.join(JBOSS_DIR, 'bin', 'twiddle.sh') 
    url = 'file:' + os.path.join(JBOSS_DIR, 'server', 'default', 'deploy', os.path.basename(application)) 

    p = Popen([twiddle, 'invoke', 'jboss.system:service=MainDeployer', 'isDeployed', url], stdout=PIPE) 
    isdeployed = p.communicate()[0] 

    print type(isdeployed) 
    print type('true') 
    print isdeployed 
    return isdeployed == 'true' 

La sortie est:

<type 'str'> # type(isdeployed) 
<type 'str'> # type('true') 
true   # isdeployed 

mais False est toujours renvoyé. J'ai également essayé return str(isdeployed) == 'true'.

+0

comparision Vous êtes sûr qu'il n'y a pas nouvelle ligne après « vrai »? Peut-être essayer isdeployed.strip() == 'vrai' –

Répondre

8

Etes-vous sûr qu'il n'y a pas de caractère de saut de ligne de fin, ce qui fait que votre chaîne contient "true\n"? Cela semble probable.

Vous pourriez essayer de retourner isdeployed.startswith("true"), ou un peu de décapage.

+0

Oh, il y a. C'était simple et ça m'a dérangé pendant un moment. Merci! – ravun

6

Avez-vous essayé d'appeler

isdeployed.strip() 

avant la

+0

Je n'ai pas remarqué la nouvelle ligne. Je vais utiliser la fonction strip(). Merci! – ravun