如果连接由python中的subprocess.Popen()打开,请关闭

时间:2015-09-04 06:20:06

标签: python mysql popen

我对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

2 个答案:

答案 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