我有一个包含 py2exe 的 Python 程序。该程序运行良好,但是,用户可以有意或无意地启动第二个实例(第三个等)。
这是不可取的,特别是因为程序使用串行端口,因此下一个 session 会发现端口繁忙,从而给出端口错误等。
如何防止程序在第一个 session 启动后启动另一个 session ?
最佳答案
有很多方法可以标记程序是否正在运行。以下是我会做的几件事:
1)您可以在临时文件夹中创建一个临时文件来表示我(如程序中)正在运行。因此,每当打开一个新实例时,它都会检查临时文件夹中是否存在临时文件,如果存在,则会抛出一个错误,指出只能打开一个实例。请记住,退出之前您必须清除临时文件。
这只适用于程序正常退出。如果程序被强制关闭,则临时文件可能不会被删除,从而导致下次运行时出现问题。
2) 你可以检查当前进程列表来检查你的程序是否正在运行,然后抛出错误。这将需要 pywin32 模块来访问进程列表。这需要更多的处理并增加更多的开销(pywin32 模块)。但这更可靠。
您可以混合两者的组合,始终检查 1,如果 1 失败则检查 2。如果您想使用 pywin32 访问进程列表,这里有一个示例代码。您可以从这里获取pywin32
:http://sourceforge.net/projects/pywin32/
import win32com.client
import sys
def CheckMultipleInstances():
winmgmts = win32com.client.GetObject('winmgmts:')
processes = winmgmts.InstancesOf('Win32_Process')
count = 0
for p in processes:
if 'MyProgram.exe' == p.Properties_("Name").Value:
count += 1
if cound > 1:
# This would mean that the current instance is the second one
# raise 'Only one instance of the program can run'
# Send a message to the user for confirmation
# Do other code
sys.exit()
[编辑]如果您使用多线程。您必须在使用 win32com
模块的线程中使用 pythoncom.CoInitialize()
。
关于python - 如何防止包含 py2exe 的 Python 程序启动多个 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26370359/