繁体   English   中英

为什么subprocess.popen的行为与单个语句不同?

[英]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_variablePopen实例。

另一方面, 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM