Python';不返回';子流程returncode中的语句

Python';不返回';子流程returncode中的语句,python,return,subprocess,popen,return-code,Python,Return,Subprocess,Popen,Return Code,我刚刚在Python中遇到了一行非常奇怪的代码: .... self.myReturnCode = externalProcessPopen.returncode .... .... return not self.myReturnCode .... return not到底代表什么?我知道Popen进程在运行时的returncode是None,完成并成功退出后的returncode是随机数。但是代码的作者在这里究竟想要实现什么呢 还值得注意的是,同一作者稍后会检查返回代码,如下所示: if

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

....
self.myReturnCode = externalProcessPopen.returncode
....
....
return not self.myReturnCode
....
return not
到底代表什么?我知道Popen进程在运行时的returncode是None,完成并成功退出后的returncode是随机数。但是代码的作者在这里究竟想要实现什么呢

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

if not testClass.testFunction():
    logger.error('Failed to execute Function')
    ....
not
是返回值的布尔倒数的<代码>返回返回该运算符的结果。换句话说,表达式应理解为
return(而不是self.myReturnCode)
。引用文件:

运算符
not
如果其参数为false,则产生
True
,否则产生
false

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

如果
externalProcessPopen.returncode
是外部进程的返回码,则如果进程带错误退出,则返回码为正整数;如果进程成功退出,则返回码为
0
。这就叫做,;返回的非零值完全取决于进程
not 0
则为
True
not 1
(或更高的整数值)给出
False

如果它是
None
,那么
True
notnone
True
)也将被返回,但是
subprocess.Popen()
返回的代码只有在进程尚未退出时才是
None

return not self.myReturnCode
应解释为:

return (not self.myReturnCode)
它在代码中的作用很简单:

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

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

因此,返回
非self。myReturnCode
表示当进程成功时返回
True
,当进程指示失败时返回
False

return not self.myReturnCode
相当于:

return False if self.myReturnCode else True

您似乎建议0不是真值(为什么?),而1或更高的整数值是真值。这就引出了一个问题:“真值”的定义是什么?@Konos5:不要将进程退出状态约定与Python布尔值混淆。
not
将一种约定转换为另一种约定<代码>0意味着过程成功,在这里翻译成
True
。是的,我明白了。0对于流程来说是成功的,但是对于Python来说似乎不是一个真正的值——这就是为什么我们不使用。我的问题是为什么0首先不被认为是真值。在Python中,数字0、空容器和空字符串都被认为是假的。在许多情况下,这使得代码非常可读。为什么你觉得
0
应该是真的呢?从历史上看,Python中的布尔值相对较新。在C语言中,
0
也是false,Python长期使用整数而不是布尔值。今天,
bool
int
的一个子类,
True==1
False==0
都是True。