2010-07-09 56 views
4

我认为这是一个非常基本的问题,但无论如何,这是它。在Python中监控进程?

我需要编写一个python脚本来检查以确保某个进程(如notepad.exe)正在运行。如果该进程正在运行,则什么也不做。如果不是,请启动它。这将如何完成。

我使用Python 2.6在Windows XP

+0

我不认为有必要提到“黑色”...... – nevets1219 2010-07-09 17:56:41

+0

好的,修正了这个问题。你有问题的解决方案? – 2010-07-09 17:57:21

回答

4

有几个选项,

1:越粗糙,但明显的是做一些文字处理反对:

os.popen('tasklist').read() 

2:更多的参与选项是使用pywin32并研究win32 API来确定哪些进程正在运行。

3:WMI(I found this刚才)和here is a vbscript如何通过WMI为机器查询进程的示例。

+0

只是为了提供一点澄清,第一个选项变得非常简单,正则表达式搜索 >>> bool(re.search('notepad.exe',os.popen('tasklist')。read())) – andyortlieb 2010-07-09 18:12:08

+1

你甚至不需要正则表达式。一个简单的'如果在字符串中的子字符串︰'类型的语句工作得很好。 (或者说,'不在',因为它应该在进程不活动时执行) – JAB 2010-07-09 18:16:03

+0

这正是我需要的! Thansk太多了! – 2010-07-09 18:25:03

15

os模块的进程创建功能显然不赞成在Python 2.6及更高版本,与模块是选择的模块了,所以......

if 'notepad.exe' not in subprocess.Popen('tasklist', stdout=subprocess.PIPE).communicate()[0]: 
    subprocess.Popen('notepad.exe') 

注意的是Python 3,字符串被检查将需要一个字节的对象,所以它会是

if b'notepad.exe' not in [blah]: 
    subprocess.Popen('notepad.exe') 

(文件/进程的启动并不需要是一个字节对象的名称。)

+0

+1,这是一个重要的观点。为了简短的演示,我使用了os.process(),但需要注意的是子进程功能更强大(当然也不推荐使用)。 – andyortlieb 2010-07-09 18:56:29