我的应用程序正在根据用户的请求(按钮)打开带有os.startfile的pdf文件。当用户再次按下按钮时,有没有办法关闭此pdf?如果没有这样做,我会收到错误:
WindowsError:[错误32]进程无法访问该文件,因为另一个进程正在使用该文件:'default_report.pdf'
编辑:在Python中我得到:QPainter::begin(): Returned false
(WindowsError来自可执行文件)。我可以用try
以某种方式捕捉这个错误吗?至少要求用户手动关闭pdf ...
另一个相关问题。我的应用程序被编译为可执行文件,并从另一个VB6应用程序(也在按钮上)调用。有没有办法从Python中检测到可执行文件已经在运行(exe文件总是具有相同的位置)并在这种情况下在再次启动它之前将其终止?问题类似,如果我第二次运行可执行文件,因为它们开始冲突(他们使用公共数据库),我得到错误。从VB6它不起作用,我不知道细节...
修改:用psutil
解决(请参阅我对jheyse的回答评论)
P.S。如果重要的话,我会使用Python 3.2,PyQt 4和cx_freeze进行exe生成。
答案 0 :(得分:2)
1.我不认为它是直接可能的,因为docs说“startfile()在关联的应用程序启动后立即返回。没有选项等待应用程序关闭,没有检索应用程序退出状态的方法。“
2.要从python中按名称终止进程,可以使用psutil module。这样的事情(如果打开的话,下面的代码会杀死windows计算器):
for p in psutil.process_iter():
if p.name == 'calc.exe':
p.kill()