我对python很新。我想知道,在使用subprocess.Popen
时,我们是否需要关闭连接或子进程自动关闭连接?
process = subprocess.Popen(["mysql", "-uroot", "-ppassword", "database"],
stdin = subprocess.PIPE,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE)
process_out, process_err = process.communicate(file("test.sql").read())
print process_out
答案 0 :(得分:2)
process
是表示子进程的对象。有了它,你可以做你想做的一切,但最后,在处理完所有通信之后,你应.wait()
为它而不是长时间拥有僵尸进程。
只有在.wait()
之后,子进程才真正从操作系统的视图中消失。
如果您自己处理通信,则说明有效。但是,如果您的情况允许您使用.communicate()
方法并且您这样做,则无需致电.wait()
,因为它会为您执行此操作。
答案 1 :(得分:2)
.communicate()
调用关闭所有管道(如果它是“连接”的意思)并重新获得子进程。之后你不需要做任何事情。
#!/usr/bin/env python3
from subprocess import Popen, PIPE
with open('test.sql', 'rb', 0) as input_file, \
Popen([cmd] + args, stdin=input_file, stdout=PIPE, stderr=PIPE) as p:
output, errors = p.communicate()
if p.returncode != 0:
raise Error