Python string comparison

I have a python function that calls a subprocess call in a shell script that outputs "true" or "false". I save the output from subprocess.communicate() and try to do return output == 'true' , but it returns False every time. I'm not too familiar with python, but reading about string comparisons says that you can compare strings with ==,! = Etc.

Here is the 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' 

Conclusion:

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

but False always returns. I also tried return str(isdeployed) == 'true' .

+4
source share
2 answers

Are you sure the trailing line character does not exist, so your line contains "true\n" ? It seems likely.

You can try to return isdeployed.startswith("true") or delete.

+8
source

Did you try to call

 isdeployed.strip() 

before comparison

+6
source

Source: https://habr.com/ru/post/1305116/


All Articles