Python';不返回';子流程returncode中的语句
我刚刚在Python中遇到了一行非常奇怪的代码: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
....
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。