2
  1. 我的应用程序正在根据用户的请求(按钮)打开一个带有 os.startfile 的 pdf 文件。当用户再次按下按钮时,有什么方法可以关闭此 pdf?如果不这样做,我会收到错误消息:

    WindowsError:[错误 32] 该进程无法访问该文件,因为它正在被另一个进程使用:'default_report.pdf'

    编辑:在 Python 中我得到:QPainter::begin(): Returned false(WindowsError 来自可执行文件)。我能以某种方式抓住这个错误try吗?至少要求用户手动关闭 pdf...

  2. 另一个相关的问题。我的应用程序被编译为可执行文件,并从另一个 VB6 应用程序(也在按钮上)调用。有什么方法可以从 Python 中检测到可执行文件已经在运行(exe 文件始终具有相同的位置)并在这种情况下在再次启动之前将其杀死?问题类似,如果我第二次运行可执行文件,我会收到错误,因为它们开始发生冲突(它们使用公共数据库)。从VB6它不工作,我不知道细节......

    编辑:解决psutil(见我对jheyse答案的评论)

ps 如果重要的话,我使用 Python 3.2、PyQt 4 和 cx_freeze 来制作 exe。

4

1 回答 1

2

1.我不认为这是直接可能的,因为正如文档所说,“startfile() 在相​​关应用程序启动后立即返回。没有等待应用程序关闭的选项,也无法检索应用程序的退出状态。”

2.要从 python 中按名称杀死进程,您可以使用psutil 模块。像这样的东西(如果打开,下面的代码将杀死 Windows 计算器):

for p in psutil.process_iter():
    if p.name == 'calc.exe':
        p.kill()
于 2012-07-18T03:15:53.813 回答