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