kst*_*tis 3 python subprocess return popen return-code
我在Python中遇到了一段非常奇怪的代码:
....
self.myReturnCode = externalProcessPopen.returncode
....
....
return not self.myReturnCode
....
Run Code Online (Sandbox Code Playgroud)
究竟return not
代表什么?我知道Popen进程的返回码在它仍在运行时为None,一旦完成并成功退出,则为随机数.但是代码的作者究竟想要在这里实现什么呢?
也许值得注意的是,同一作者稍后会检查返回代码,如下所示:
if not testClass.testFunction():
logger.error('Failed to execute Function')
....
Run Code Online (Sandbox Code Playgroud)
not
是一个布尔运算符,它返回值的布尔反转.return
返回该运算符的结果.换句话说,表达式应该被理解为return (not self.myReturnCode)
.引用文档:
如果运算符的参数为false,则运算符
not
产生.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
(not None
是True
),但subprocess.Popen()
返回代码仅 None
在进程尚未退出时返回.
return not self.myReturnCode
Run Code Online (Sandbox Code Playgroud)
应解释为:
return (not self.myReturnCode)
Run Code Online (Sandbox Code Playgroud)
它在你的代码中做的只是这样:
0
则返回True
0
那么返回False
.