def is_running(name: str) -> bool:
name = name if name.endswith('.exe') else name + '.exe'
return name in [process.name() for process in psutil.process_iter()]
或用于终止进程的函数:
def kill(name: str) -> bool:
name = name if name.endswith('.exe') else name + '.exe'
for process in psutil.process_iter():
if process.name() == name:
process.kill()
return True
return False
然后你可以像这样简单地使用它们
if __name__ == "__main__":
app_name = 'chrome'
if is_running(name=app_name):
if kill(name=app_name):
print(f'{app_name} killed!')
else:
print(f'{app_name} is not running!')
从
matplotlib
源代码发布基于线程的解决方案:lib/matplotlib/backends/_backend_tk.py
令人烦恼的是,虽然
Tk().willdispatch()
存在(尽管它似乎没有文档记录)撒谎说mainloop
正在运行,而它没有运行(我使用它来允许asyncio
任务将asyncio
事件与tkinter
事件交错,但它设置的底层标志(C级结构成员dispatching
)没有Python级API测试标志的唯一地方是在自动封送从非主线程到
mainloop
线程的调用的函数中,而将其用作检测机制并不实际(它只需要生成线程来执行测试,涉及超时,并在失败时抛出异常,即使您可以让它工作,也会让它变得丑陋)简言之,它将由您负责。您可能使用的解决方案是创建一个子类,该子类拦截对
mainloop
的调用并记录已调用的调用:这不是一个很好的解决方案,我一般不鼓励这样做。真正的答案是,有一个,而且只有一个,运行
mainloop
的单一位置,而不是将可能的启动点分散到整个程序中如果您知道进程名称,在Windows中,可以使用psutil检查进程是否正在运行
导入PSUTIL:
生成一个函数以检查进程是否正在运行:
或用于终止进程的函数:
然后你可以像这样简单地使用它们
相关问题 更多 >
编程相关推荐