Popen.communicate()是否隐式调用Popen.wait()?

时间:2017-06-09 11:47:17

标签: python python-3.x subprocess

在Python 3文档中,它在https://docs.python.org/3/library/subprocess.html#subprocess.Popen.communicate

下声明
  

等待进程终止。

这是否意味着Popen.communicate()还调用了Popen.wait(),以便我可以通过不在p2.wait()之前写p2.returncode而采取快捷方式并执行:

  p0 = subprocess.Popen(["/usr/bin/svn", "info"], stdout=subprocess.PIPE)
  p1 = subprocess.Popen(["/bin/grep", "Revision:"], stdin=p0.stdout, stdout=subprocess.PIPE)
  p2 = subprocess.Popen(["/bin/sed", r"s/Revision: //g"], stdin=p1.stdout, stdout=subprocess.PIPE,universal_newlines=True)
  stdout, stderr = p2.communicate()# implicitly calls p2.wait() to wait for exit code?
  info_struct.exitcode = p2.returncode

而不是

  p0 = subprocess.Popen(["/usr/bin/svn", "info"], stdout=subprocess.PIPE)
  p1 = subprocess.Popen(["/bin/grep", "Revision:"], stdin=p0.stdout, stdout=subprocess.PIPE)
  p2 = subprocess.Popen(["/bin/sed", r"s/Revision: //g"], stdin=p1.stdout, stdout=subprocess.PIPE,universal_newlines=True)
  stdout, stderr = p2.communicate()# implicitly calls p2.wait() to wait for exit code?
  p2.wait()# explicit wait for exit code call
  info_struct.exitcode = p2.returncode

1 个答案:

答案 0 :(得分:0)

是的,确实如此。请参阅source code(链接的Python 3.6.1版本):

sts = self.wait(timeout=self._remaining_time(endtime))

您不必自己致电p2.wait(),此过程已经终止。