0
点赞
收藏
分享

微信扫一扫

python防止程序多开,打包EXE实现

waaagh 2022-03-11 阅读 101
python

使用到系统os模块和psutil模块实现

一、psutil模块:

1.psutil是一个跨平台库(http://pythonhosted.org/psutil/)能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。它主要用来做系统监控,性能分析,进程管理。它实现了同等命令行工具提供的功能,如ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等。目前支持32位和64位的Linux、Windows、OS X、FreeBSD和Sun Solaris等操作系统.

二、代码实现:

首先导入os和psutil模块

import os
import psutil

然后执行以下代码,注释很清楚,细看

pids = psutil.pids()              #获取所有进程PID
list=[]                           #空列表用来存储PID名称
i=0                               #计数,程序名称出现的次数
for pid in pids:                  #遍历所有PID进程
    p = psutil.Process(pid)       #得到每个PID进程信息
    list.append(p.name())         #将PID名称放入列表
    s=str(p.name())               #将PID名称转换成字符串进行判断
    print(s)
    if s =="123.exe":             #“123.exe”你要防多开进程的名称
        i+=1

接下来进行条件判断

if i<2:                           #如果这个程序名称在程序管理器中出现次数少于两次,执行以下代码

                  





                #这里输入你所要进行的主程序





     
else:                            #这个程序名称在任务管理器中出现两次以上,进行程序关掉
   
 pidd=os.getpid()               #获取当前PID名称
   
 cmd = 'taskkill /pid ' + "pidd" + ' /f'         #输入关闭名称命令
    
 os.system(cmd)              #打开系统命令行,将上面的命令导入,即可关掉重复程序 

以上就是可以实现的所有代码,套入这个公式,将自己程序打包即可实现。

注意:123.exe  是我的应用名,得改成你的,自己可以在任务管理器找找名称

我自己写了一个简单的demo,可以试着打包运行一下。

import os
import psutil
import cv2
pids = psutil.pids()              #获取所有进程PID
list=[]                           #空列表用来存储PID名称
i=0                               #计数,程序名称出现的次数
for pid in pids:                  #遍历所有PID进程
    p = psutil.Process(pid)       #得到每个PID进程信息
    list.append(p.name())         #将PID名称放入列表
    s=str(p.name())               #将PID名称转换成字符串进行判断
    print(s)
    if s =="123.exe":             #“123.exe”你要防多开进程的名称
        i+=1
print(list)
print(i)
if i<2:                           #如果这个程序名称在程序管理器中出现次数少于两次,执行以下代码
    # while True:
    #     print("好")
    im1 = cv2.imread(r"E:\\photos\\wangzai.png")
    cv2.namedWindow("im1", cv2.WINDOW_NORMAL)  # namedWindow 窗口名称+窗口类型 cv2.WINDOW_NORMAL(窗口大小可以拖动)
    cv2.imshow("im1", im1)
    cv2.waitKey(0)

else:                            #这个程序名称在任务管理器中出现两次以上,进行程序关掉
    pidd=os.getpid()               #获取当前PID名称
    cmd = 'taskkill /pid ' + "pidd" + ' /f'         #输入关闭名称命令
    try:                            #程序防抱死,用try和except
        os.system(cmd)              #打开系统命令行,将上面的命令导入,即可关掉重复程序
    except:
        im1 = cv2.imread(r"E:\\photos\\gray.jpg")
        cv2.namedWindow("im1", cv2.WINDOW_NORMAL)  # namedWindow 窗口名称+窗口类型 cv2.WINDOW_NORMAL(窗口大小可以拖动)
        cv2.imshow("im1", im1)
        cv2.waitKey(0)

记得最后打包一下程序,才能实现exe程序防多开,如何打包看这里

(1条消息) python利用pyinstaller打包文件_幼稚园码农的博客-CSDN博客

如有帮助,记得点赞三连

举报

相关推荐

0 条评论