如何判断程序是否打开

2024-04-19 19:04:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在自动化一个过程,包括运行hapfacs3.0,一个设计用来构建面部图像的C程序。然后用python设置一些参数来保存。自动化将完成这个过程1000次。保存过程包括打开文件资源管理器(我在Windows7上),输入文件名,然后保存。在

我遇到的一个问题是,文件资源管理器偶尔需要一段时间才能打开,这会扰乱自动化,因为程序在文件资源管理器窗口打开之前就开始输入文件名。在

我希望程序在开始键入之前等待文件资源管理器打开。因此,我需要知道文件资源管理器是否打开。我在这里找到了这个页面:

Python check if a process is running or not

建议使用psutil模块:

import psutil    
"someProgram" in (p.name() for p in psutil.process_iter())

但是名单

^{pr2}$

与关闭文件资源管理器时相比,文件资源管理器处于打开状态时没有不同,这表明文件资源管理器从未添加到列表中。我仍然可以检查文件资源管理器是否使用psutil打开,或者是否有其他方法来实现我的目标?谢谢你的帮助。在


Tags: 文件in图像程序参数键入if文件名
2条回答

编辑:我觉得这是一个XY问题(http://xyproblem.info/),作者通过键盘启动文件资源管理器并选择Hapfacs文件,因为他们不知道如何使用命令行参数,“对于每个文件,启动Hapfacs.exe $file”。在


也许你应该通过Python文件管理器来实现自动化?在

内置subprocess.Popen对于管道是灵活的。在

如果要调用程序并等待程序终止,subprocess.call和{}库更易于使用。在

不幸的是,在windows上找不到任何更改的原因”资源管理器“它负责几乎所有的文件操作(文件资源管理器、桌面管理等…)总是打开的,并且从单个实例运行。我不知道python有什么方法可以做到这一点,但我确实有一个可以合并的解决方案,即使它并不理想。在

使用PIL,可以在这里找到http://www.pythonware.com/products/pil/,您可以获取屏幕的图像并检查特定点的像素颜色,这应该允许您当前所追求的。如果你需要从屏幕抓取像素颜色的最好的工具,我能想到的快速模型将是自动热键窗口间谍。在

希望这有帮助,我知道自动化有时是多么烦人,当你不得不做这样的黑客,所以让我知道如果你有任何其他问题。在

编辑: 我在胡思乱想,当文件资源管理器打开时,资源管理器打开的句柄数量会增加一个相当可观的裕度,如果您除了运行自动脚本之外什么都不做,那么这种行为是可以预测的,但您需要进行一些实验。在

这就是我所拥有的:

import psutil
for proc in psutil.process_iter():
    if 'explorer' in proc.name():
        print(proc.name() + " handles:" + str(proc.num_handles()))

当我在文件资源管理器关闭与文件资源管理器打开时,我会随机增加大约100个句柄或更多,所以你可以存储以前的数量并轮询当前的数量,假设你不打开任何其他东西,当句柄增加X时,你知道文件资源管理器已经打开并且可以开始输入,然后当它下降到接近X数量,你知道它关闭了,你重新保存新的句柄计数,并等待你的X再次增加。在

虽然这不是一个完美的解决方案,你应该能够让它很好地为你想要的。在

编辑2

这对我来说是可行的,你可能需要更改通常的增加量,因为它可能是创建的句柄的较大或较小的数量。在

^{pr2}$

相关问题 更多 >