在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
答案 0 :(得分:0)
是的,确实如此。请参阅source code(链接的Python 3.6.1版本):
sts = self.wait(timeout=self._remaining_time(endtime))
您不必自己致电p2.wait()
,此过程已经终止。