【问题标题】:Monitor Process in Python?在 Python 中监控进程?
【发布时间】:2010-07-09 17:54:01
【问题描述】:

我认为这是一个非常基本的问题,但无论如何。

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

我在 Windows XP 上使用 Python 2.6

【问题讨论】:

  • 我觉得没必要提“黑”……
  • 好的,解决了。你有解决问题的办法吗?

标签: python process monitor restart


【解决方案1】:

os 模块的进程创建功能在 Python 2.6 及更高版本中显然已弃用,subprocess 模块现在是首选模块,所以...

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')

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

【讨论】:

  • +1,这很重要。为了更短的演示,我选择了 os.process(),但重要的是要注意 subprocess 更强大(当然不被弃用)。
【解决方案2】:

有几个选项,

1:更粗略但明显的是对以下内容进行一些文本处理:

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

2:更复杂的选择是使用 pywin32 并研究 win32 API 以确定哪些进程正在运行。

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

【讨论】:

  • 只是为了提供更多说明,第一个选项通过正则表达式搜索变得非常简单 >>> bool ( re.search('notepad.exe',os.popen('tasklist').读()))
  • 你甚至不需要正则表达式。一个简单的if substring in string:-type 语句就可以了。 (或者更确切地说,not in,因为它应该在进程不活动时执行。)
  • 这正是我所需要的!非常感谢!
  • 我这样做了: import os process = os.popen("tasklist").read() if "notepad" in process: print "Process Running" else: print "Process Terminated" 它工作得很好!再次感谢大家的帮助!
  • 我想指出,如果另一个进程在其自己的名称中包含子字符串“notepad.exe”,那么您将面临相对不太可能的误报,但您会注意到每个进程都是第一个行,因此搜索“\nnotepad.exe”就足够了,以包含该新行。
【解决方案3】:
猜你喜欢
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 2011-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-15
相关资源
最近更新 更多