Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python 'return not' statement in subprocess returncode

I just came across a very strange line of code in Python:

....
self.myReturnCode = externalProcessPopen.returncode
....
....
return not self.myReturnCode
....

What exactly return not stands for? I am aware that the returncode of a Popen process is None while it's still running and a random number once it completes and exits successfully. But what exactly is the author of the code trying to achieve here?

It might also be worth noting that the same author later on checks the return code like this:

if not testClass.testFunction():
    logger.error('Failed to execute Function')
    ....
like image 917
stratis Avatar asked Dec 01 '22 02:12

stratis


1 Answers

not is a boolean operator that returns the boolean inverse of the value. return returns the result of that operator. In other words, the expression should be read as return (not self.myReturnCode). Quoting the documentation:

The operator not yields True if its argument is false, False otherwise.

If self.myReturnCode is a true value, not self.myReturnCode is False, and vice versa. Note that self.myReturnCode can be any Python value, but not always returns a boolean value, either True or False.

If externalProcessPopen.returncode is the return code of an external process, then it'll be a positive integer if the process exited with an error, 0 if it exited successfully. This is called the process exit status; what non-zero values are returned depends entirely on the process. not 0 is then True, not 1 (or a higher integer value) gives you False.

If it is None, then True (not None is True) would be returned as well, but a subprocess.Popen() return code is only None if the process has not yet exited.

like image 101
Martijn Pieters Avatar answered Dec 07 '22 23:12

Martijn Pieters