[英]Why does subprocess.popen behave differently as a single statement?
尝试进行subprocess.Popen调用以获取命令的返回代码时,根据是否将调用分解为不同的语句,我得到不同的结果。 我不再束手无策了,但是我无法阐明为什么会这样,并且想了解更多(如果有可能得到一条陈述,那么显然会更好)。
我想做的是以下几点:
my_variable = subprocess.Popen(
'ip addr show ens192 | grep master',
shell=True).communicate().returncode
产生:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'returncode'
但是,当我采用相同的逻辑并将其分成几行时,它会起作用:
>>> my_variable = subprocess.Popen('ip addr show ens192 | grep master', shell=True)
>>> my_variable.communicate()
(None, None)
>>> my_variable.returncode
1
>>>
为什么是这样? 这不是我过去使用Python的行为,我猜测它与它在后台运行命令的方式有关。
returncode
是的一个属性Popen
,不是由返回的元组communicate()
。
因此my_variable.returncode
工作,因为my_variable
是Popen
实例。
另一方面, subprocess.Popen(...).communicate().returncode
不起作用,因为subprocess.Popen(...)
是Popen
实例,而subprocess.Popen(...).communicate()
计算结果是由communicate
返回的元组(None, None)
,而不是调用它的Popen
实例。 错误消息告诉您,元组没有属性returncode
。
您的问题仅仅是对communicate()
返回的结果感到困惑。 它不会返回调用它的Popen
实例。 这不是Popen
的内部工作原理或语义问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.