python 用Popen打开了3个子进程窗口,怎么用父进程关闭这些子进程窗口

千年捞菜 2014-09-06 08:36:23
我在main.py里用subprocess.Popen打开了3个.exe子进程,各自运行在一个控制台里,现在我要在父进程窗口关闭的时候,3个子进程窗口跟着自动关闭,请问怎么实现,我用kill,terminate都没法关闭子进程窗口。
附上我打开子进程代码:
main.py:
#coding=gbk
import subprocess
listexes=['start apps.exe','start apps.exe','start apps.exe']
for exe in listexes:
pro=subprocess.Popen(exe, shell=True)
time.sleep(20)
...全文
710 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
panghuhu250 2014-09-06
  • 打赏
  • 举报
回复
引用 2 楼 a350277864 的回复:
[quote=引用 1 楼 iasky 的回复:]
pro = subprocess.Popen(cmd, stdout=subprocess.PIPE, 
                       shell=True, preexec_fn=os.setsid) 

os.killpg(pro.pid, signal.SIGTERM)
发送SIGTERM到所有pro进程中。
谢谢回答,我用的是python3.4的版本。现在用你的方法报错了,如下 AttribueError:'module' object has no attribute 'setsid'[/quote] 没试试把"preexec_fn=os.setsid"去掉?
千年捞菜 2014-09-06
  • 打赏
  • 举报
回复
我是在WIN下写的,网上查了说很多都是在unix下有效,在windows下无效的函数,怎么这样呢,弄了一天了还没搞好
千年捞菜 2014-09-06
  • 打赏
  • 举报
回复
引用 1 楼 iasky 的回复:
pro = subprocess.Popen(cmd, stdout=subprocess.PIPE, 
                       shell=True, preexec_fn=os.setsid) 

os.killpg(pro.pid, signal.SIGTERM)
发送SIGTERM到所有pro进程中。
谢谢回答,我用的是python3.4的版本。现在用你的方法报错了,如下 AttribueError:'module' object has no attribute 'setsid'
iasky 2014-09-06
  • 打赏
  • 举报
回复
pro = subprocess.Popen(cmd, stdout=subprocess.PIPE, 
                       shell=True, preexec_fn=os.setsid) 

os.killpg(pro.pid, signal.SIGTERM)
发送SIGTERM到所有pro进程中。
angel_su 2014-09-06
  • 打赏
  • 举报
回复
可以试试creationflags参数... subprocess.Popen('app.exe', creationflags=subprocess.CREATE_NEW_CONSOLE)
angel_su 2014-09-06
  • 打赏
  • 举报
回复
你要控制子进程的话,貌似不能用start。改回简单的方式Popen('app.exe'),然后用无窗口pythonw.exe执行(双击执行的话,改pyw后缀),这样会出你要的多个cmd窗口...

37,744

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧