描述:公司服务器有设置一个bat文件,用来清理磁盘空间,定时每天早上8点30分执行,但是不够灵活,需要一个可以实时检测C盘,并且在C盘低于阈值时就执行bat文件清理磁盘
为什么需要执行多线程?
因为我们需要长时间执行某一个动作,如果不使用多线程,界面会卡死,导致程序异常退出,
1.导库
代码语言:Python复制import os
import shutil
import time
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
from PyQt5.QtCore import QThread
os:执行bat文件
shutil:文件操作
time:获取时间
from PyQt5 import QtCore, QtGui, QtWidgets:界面开发
import sys:显示窗体
from PyQt5.QtCore import QThread:执行多线程
2.主要代码
创建一个线程类,继承QThread在run方法里面编写我们需要的程序
这里我是首先对C盘的容量进行获取,所有空间,已用空间,剩余空间
写一个无限循环,并在剩余空间小于2G时执行bat文件
代码语言:python代码运行次数:0复制class CrawlThread(QThread):
def __init__(self):
super(CrawlThread, self).__init__()
def run(self):
#声明一个阈值
clean_number = float(2)
gb = 1024 ** 3
while 1 == 1:
# 判断磁盘容量是否小于2G
total_b, used_b, free_b = shutil.disk_usage('C:')
# 将磁盘可用容量转换为GB的形式,方便阅读
free_number = free_b / gb
timeing2 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
# 判断磁盘容量是否小于2G
if free_number < clean_number:
os.popen("C:/CLEANER-ks-NEW.bat")
f = open("timingTemp.txt", "a")
f.write(timeing2 "-" "磁盤清理成功n")
f.close()
time.sleep(60)
全部代码
运行时,需要在if name == 'main':下面创建多线程执行的对象,并启动执行多线程 CrawlThread = CrawlThread() CrawlThread.start()
代码语言:python代码运行次数:0复制# -*- coding: utf-8 -*-
import os
import shutil
import time
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
from PyQt5.QtCore import QThread
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(549, 128)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(120, 20, 281, 51))
font = QtGui.QFont()
font.setPointSize(22)
self.label.setFont(font)
self.label.setObjectName("label")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 549, 29))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "磁盤清理"))
self.label.setText(_translate("MainWindow", "磁盤清理運行中"))
class CrawlThread(QThread):
def __init__(self):
super(CrawlThread, self).__init__()
def run(self):
clean_number = float(2)
gb = 1024 ** 3
while 1 == 1:
# 判断磁盘容量是否小于2G
total_b, used_b, free_b = shutil.disk_usage('C:')
# 将磁盘可用容量转换为GB的形式,方便阅读
free_number = free_b / gb
timeing2 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
# 判断磁盘容量是否小于2G
if free_number < clean_number:
os.popen("C:/CLEANER-ks-NEW.bat")
f = open("timingTemp.txt", "a")
f.write(timeing2 "-" "磁盤清理成功n")
f.close()
time.sleep(60)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
CrawlThread = CrawlThread()
CrawlThread.start()
sys.exit(app.exec_())