zoukankan      html  css  js  c++  java
  • 计划任务工具-windows

    计划任务工具根据自己设定的具体时间,频率,命令等属性来规定所要执行的计划。

    代码

    # -*- coding: utf-8 -*-
    
    """
    Module implementing App.
    """
    
    from PyQt4.QtGui import QMainWindow
    from PyQt4.QtCore import pyqtSignature
    import time,os
    import QtUtil
    import shutil
    import time
    
    from v.Ui_App import Ui_MainWindow
    
    class App(QMainWindow, Ui_MainWindow):
        """
        Class documentation goes here.
        """
        def __init__(self, parent = None):
            """
            Constructor
            """
            QMainWindow.__init__(self, parent)
            self.setupUi(self)
            
            # 创建'res/command'文件夹
            if os.path.exists('res/command'):
                pass
            else:
                os.mkdir('res/command')
            
    #         self.startDate.textFromDateTime()
        
        
        @pyqtSignature("")
        def on_run_btn_clicked(self):
            """
                            创建任务.
            """     
            
            # 在查询栏显示的内容
            cmd = self.taskRun.toPlainText()
            # 构建'res/command/01.txt'文件
            if not os.path.exists('res/command/01.txt'):
                m = open('res/command/01.txt','w')
                m.close()
            p = str(self.modifier.text())
            # 判断日期是否正确
            if self.endDate.text() <= self.startDate.text():
                QtUtil.showOkDialog(self, u'日期出错', u'结束日期要大于开始日期')
            
            elif not p.isdigit():
                QtUtil.showOkDialog(self, u'频率出错', u'运行频率必须为整数')
                
            else:
                # 如果任务条件不完整,则创建失败
                if self.taskName.text()=='' or self.modifier.text()=='' or cmd=='':
                    QtUtil.showOkDialog(self, u'创建失败', u'任务内容缺失')
                else:
                    # 读取'res/command'下所有文件的文件名到filename
                    for root, dirs, files in os.walk('res/command'):
                        for file in files:
                            filename = open('res/filename.txt','a')
                            filename.write('/')
        #                     filename.truncate()
                            filename.write(str(file))
                            filename.close()
                            filename1 = open('res/filename.txt')
                            fn = filename1.read()
                            filename1.close()
                    print fn
                    print '/' + str(self.taskName.text()) + '.cmd'
                    # 如果任务名在filename中能找到,则说明任务已经存在
                    if '/' + str(self.taskName.text()) + '.cmd' in fn:
                        QtUtil.showOkDialog(self, u'创建失败', u'任务已存在')
                          
                    else:
                        
                        # 任务内容
                        if self.schedule.currentText() == 'monthly':
                            print 'monthly'
                            run = 'schtasks /create /tn '+ self.taskName.text() + ' /tr '+os.getcwd()+'/res/command/'+self.taskName.text()+'.bat /sc ' + self.schedule.currentText() + ' /d ' +self.modifier.text() + ' /m ' + self.month.currentText() + ' /st ' + self.timeEdit.text() + ' /sd ' + self.startDate.text() + ' /ed ' + self.endDate.text()
                        elif self.schedule.currentText() == 'once':
                            print 'once'
                            run = 'schtasks /create /tn '+ self.taskName.text() + ' /tr '+os.getcwd()+'/res/command/'+self.taskName.text()+'.bat /sc ' + self.schedule.currentText() + ' /st ' + self.timeEdit.text() + ' /sd ' + self.startDate.text() 
                            if self.startDate.text() < time.strftime('%Y/%m/%d') or (self.timeEdit.text() <= time.strftime('%H:%M:%S') and  self.startDate.text() == time.strftime('%Y/%m/%d')) :
                                QtUtil.showOkDialog(self, u'时间错误', u'设置时间早于当前时间')
                                return
                        else: 
                            print 'not monthly'
                            run = 'schtasks /create /tn '+ self.taskName.text() + ' /tr '+os.getcwd()+'/res/command/'+self.taskName.text()+'.bat /sc ' + self.schedule.currentText() + ' /mo ' +self.modifier.text() + ' /st ' + self.timeEdit.text() + ' /sd ' + self.startDate.text() + ' /ed ' + self.endDate.text()
                        
                        # 创建命令文件
                        fd = open('res/command/'+self.taskName.text()+'.bat','w')
                        fd.write(cmd)
                        fd.close()
                        
                        # 创建任务文件
                        f = open('res/command/'+self.taskName.text()+'.cmd','w')
                        f.write(run)
                        f.close()
                        # 创建任务
                        os.system(os.getcwd()+'\rescommand\'+str(self.taskName.text())+'.cmd')
                        QtUtil.showOkDialog(self, u'创建成功', u'创建成功')
        @pyqtSignature("")
        def on_delete_btn_clicked(self):
            """
                            删除任务.
            """
            # 强制删除删除框内任务
            x=os.system('schtasks /delete /tn '+str(self.taskDelete.text()).decode('gbk')+' /f')
            # 如果已经任务已经删除,则报任务不存在
            if x==1:
                QtUtil.showOkDialog(self, u'删除失败', u'任务名错误或不存在该任务')
            else:
                os.remove('res/filename.txt')
                
                
                if os.path.exists('res/command/'+self.taskDelete.text()+'.cmd'):
                    os.remove('res/command/'+str(self.taskDelete.text())+'.bat')
                    os.remove('res/command/'+str(self.taskDelete.text())+'.cmd')
                    
                # 读取'res/command'下所有文件的文件名到filename
                for root, dirs, files in os.walk('res/command'):
                    for file in files:
                        filename = open('res/filename.txt','a')
                        filename.write('/')
    #                     filename.truncate()
                        filename.write(str(file))
                        filename.close()
                        filename1 = open('res/filename.txt')
                        fn = filename1.read()
                        filename1.close()
                # 删除任务,并删除命令文件与任务文件
                QtUtil.showOkDialog(self, u'删除成功', u'删除成功') 
                
        @pyqtSignature("")
        def on_query_btn_clicked(self):
            """
                            查询任务.
            """
            # 调整 936 为 437 美国编码,才可运行
            os.system('chcp 437')
            # 查询任务
            os.system('schtasks /query')
            # 在生成新log文件前先删除以前的log文件
            if os.path.exists('res/log.txt'):
                os.remove('res/log.txt')
            
            # 遍历'res/command'的所有文件,将所有文件内容复制到log文件中
            for root, dirs, files in os.walk('res/command'):
                for file in files:
                    dir =  str(root)+'/'+str(file)
                    f = open(dir,'r')
                    scripts = f.read()
                    new_path_filename = 'res/log.txt'
                    
                    f = open(new_path_filename, 'a')
                    f.write(scripts) 
                    f.write('
    ')
                    f.close()
            # 读取log文件
            if os.path.exists('res/log.txt'):
                fd=open('res/log.txt')
                info = fd.read()
                fd.close()
                # 在查询窗口显示log文件内容
                self.taskQuery.setText(str(info))
            else:
                QtUtil.showOkDialog(self, u'失败', u'不存在任务')
        
        @pyqtSignature("")
        def on_delall_btn_clicked(self):
            """
                           清空任务.
            """
            os.system('schtasks /delete /tn  * /f')
            if os.path.exists('res/log.txt'):
                os.remove('res/log.txt')
            if os.path.exists('res/filename.txt'):   
                os.remove('res/filename.txt')
            shutil.rmtree('res/command')
            os.mkdir('res/command')
            QtUtil.showOkDialog(self, u'成功', u'任务清空')
            

    运行结果

    “任务名称”填写任务的名字,计划类型选择时间,频率填写次数,在计划类型中除了monthly之外的其他类型都填写频率,monthly时日期填写日期号数,月份也只在选择monthly时候需要选择,其他时候不用选择,月份中*号问任意月,接着填写开始时间、开始日期、结束日期,结束日期要大于开始日期,最后填写所要执行的命令,则任务创建成功。,创建任务后随时可以查阅任务,点击查询任务即可,删除任务只要填上要删除的任务名称,点击删除任务即可,清空任务为删除所有任务。

     

     

    本站文章为 宝宝巴士 SD.Team 原创,转载务必在明显处注明:(作者官方网站: 宝宝巴士 
    转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4805826.html

     

  • 相关阅读:
    根据百度API获得经纬度,然后根据经纬度在获得城市信息
    Map实现java缓存机制的简单实例
    JMS学习(七)-ActiveMQ消息的持久存储方式之KahaDB存储
    JMS学习(六)-ActiveMQ的高可用性实现
    排列与组合的一些定理
    带权图的最短路径算法(Dijkstra)实现
    JMS学习(六)--提高非持久订阅者的可靠性 以及 订阅恢复策略
    JMS学习(五)--ActiveMQ中的消息的持久化和非持久化 以及 持久订阅者 和 非持久订阅者之间的区别与联系
    分布式系统理论之两阶段提交协议
    自定义栈的实现及使用两个栈模拟队列
  • 原文地址:https://www.cnblogs.com/superdo/p/4805826.html
Copyright © 2011-2022 走看看