踩坑比较多,网上几乎找不到答案,这里总结一下。
# 加shell = True可直接通过类似控制台输入路径的方法打开txt,MP3文件
# 此时sub_proc不是打开的进程,而是windows命令处理程序,他的子程序就是我们打开的进程
sub_proc = subprocess.Popen(self.file_name, shell=True)
# psutil.Process获取处理程序的具体信息
psu_proc = psutil.Process(sub_proc.pid)
pcs = None
# 这里不能立即得到sub_proc的子程序,我这里作延时处理
for i in range(4):
time.sleep(1)
print(f'尝试检测子进程-{i + 1}')
# 获取所有子程序
pcs = psu_proc.children(recursive=True)
if len(pcs):
break
if len(pcs):
print(f'检测到子进程{len(pcs)}个')
else:
print(f'未检测到子进程,启动失败')
return
proc = pcs[0]
print(proc.pid)