Python'在子进程返回码中返回'not语句

时间:2013-12-30 12:43:47

标签: python return subprocess popen return-code

我在Python中遇到了一段非常奇怪的代码:

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

究竟return not代表什么?我知道Popen进程的返回码在它仍在运行时为None,一旦完成并成功退出,则为随机数。但是代码的作者究竟想要在这里实现什么呢?

值得注意的是,同一作者稍后会检查返回代码,如下所示:

if not testClass.testFunction():
    logger.error('Failed to execute Function')
    ....

4 个答案:

答案 0 :(得分:8)

notboolean operator,它返回值的布尔反转。 return返回该运算符的结果。换句话说,表达式应该被理解为return (not self.myReturnCode)。引用文档:

  

如果参数为假,则not运算符True,否则为False

如果self.myReturnCode是真值,则not self.myReturnCodeFalse,反之亦然。请注意,self.myReturnCode可以是任何Python值,但not 始终会返回布尔值,TrueFalse

如果externalProcessPopen.returncode是外部进程的返回代码,那么如果进程退出时出现错误,那么它将是一个正整数,0如果它成功退出。这称为process exit status;返回的非零值完全取决于进程。然后not 0Truenot 1(或更高的整数值)为您提供False

如果是None,则会返回Truenot NoneTrue),但subprocess.Popen()返回代码为如果该流程尚未退出,则仅 None

答案 1 :(得分:6)

return not self.myReturnCode

应解释为:

return (not self.myReturnCode)

它在您的代码中所做的只是:

  • 如果返回代码为0,则返回True
  • 如果返回代码不是0,则返回False

答案 2 :(得分:2)

它不是随机数,它是外部进程的返回码,其中0表示成功,非零数表示失败。

因此,返回not self.myReturnCode表示在流程成功时返回True,在流程显示失败时返回False

答案 3 :(得分:2)

return not self.myReturnCode

相当于:

return False if self.myReturnCode else True