用Popen打开一个进程并在一段时间后杀死

时间:2015-10-02 14:07:04

标签: python windows subprocess

我想在5分钟后杀死一个进程(ex),我已用

打开了
subprocess.Popen()
p = subprocess.Popen('calc.exe', shell=True)  # example

我用print(p.pid)打印了点子,用time.sleep(10)睡了10秒,然后用p.kill()杀死了这个过程。

问题是calc.exe仍在运行。我已经使用Process Explorer来查看此处发生的情况,并且子流程似乎会创建一个带有pid = p.pid的cmd,它会创建calc.exe,但是我会使用另一个pid #39;知道。

此处的所有代码:

import subprocess, os, time

p = subprocess.Popen('calc.exe', shell=True)

time.sleep(1)
print(p.pid)
p.kill()

那么我做错了什么?

谢谢!

2 个答案:

答案 0 :(得分:6)

p.kill()正在通过cmd.exe shell=True选项杀死您正在产生的Popen进程。该过程是p.pid所指的过程。从shell=True语句中移除Popen,它会像您期望的那样杀死calc.exe

答案 1 :(得分:0)

我不是运行程序但它会工作::

import subprocess
import time
p = subprocess.Popen(
['calc.exe'], stdin=subprocess.PIPE)
p.communicate()

time.sleep(1)
print (p.pid)
p.kill()

如果有效,请告诉我......