https://blog.csdn.net/pugongying1988/article/details/54616797
最近使用subprocess.Popen这个东西比较多,会大量调用adb命令,我老是怕出问题,就查了一些资料,果然是需要做子线程清理的,特此记录一下
首先呢,之前是大概是这样写的 process = subprocess.Popen(command, stdout=subprocess.PIPE),但是呢应该加 close_fds=True,否则子进程会一直存在
然后呢,就是清理了,参照上面网页里面的方法吧
def timeout_command(command, timeout):
start = datetime.datetime.now()
process = subprocess.Popen(command, bufsize=10000, stdout=subprocess.PIPE, close_fds=True)
while process.poll() is None:
time.sleep(0.1)
now = datetime.datetime.now()
if (now - start).seconds> timeout:
try:
process.terminate()
except Exception,e:
return None
return None
out = process.communicate()[0]
if process.stdin:
process.stdin.close()
if process.stdout:
process.stdout.close()
if process.stderr:
process.stderr.close()
try:
process.kill()
except OSError:
pass
return out