python版本的仿windows计划任务工具


Posted in Python onApril 30, 2018

计划任务工具-windows

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

效果图

python版本的仿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()+'\\res\command\\'+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('\n')
        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 原创,转载务必在明显处注明:(作者官方网站: 宝宝巴士 )

Python 相关文章推荐
Python 可爱的大小写
Sep 06 Python
跨平台python异步回调机制实现和使用方法
Nov 26 Python
《Python学习手册》学习总结
Jan 17 Python
tensorflow实现对图片的读取的示例代码
Feb 12 Python
tensorflow实现简单的卷积网络
May 24 Python
解决Python3 被PHP程序调用执行返回乱码的问题
Feb 16 Python
python GUI库图形界面开发之PyQt5信号与槽事件处理机制详细介绍与实例解析
Mar 08 Python
django使用JWT保存用户登录信息
Apr 22 Python
给ubuntu18安装python3.7的详细教程
Jun 08 Python
使用Keras训练好的.h5模型来测试一个实例
Jul 06 Python
Python语言编写智力问答小游戏功能
Oct 13 Python
pytorch实现ResNet结构的实例代码
May 17 Python
Python装饰器原理与用法分析
Apr 30 #Python
Python中pillow知识点学习
Apr 30 #Python
Python生成器定义与简单用法实例分析
Apr 30 #Python
Python迭代器定义与简单用法分析
Apr 30 #Python
python 实现在txt指定行追加文本的方法
Apr 29 #Python
Python 实现在文件中的每一行添加一个逗号
Apr 29 #Python
python 把文件中的每一行以数组的元素放入数组中的方法
Apr 29 #Python
You might like
PHP中全面阻止SQL注入式攻击分析小结
2012/01/30 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
关于B/S判断浏览器断开的问题讨论
2008/10/29 Javascript
fireworks菜单生成器mm_menu.js在 IE 7.0 显示问题的解决方法
2009/10/20 Javascript
js实现仿Windows风格选项卡和按钮效果实例
2015/05/13 Javascript
jQuery绑定事件on()与弹窗的简要概述
2016/04/27 Javascript
深入理解Vue2.x的虚拟DOM diff原理
2017/09/27 Javascript
vue权限管理系统的实现代码
2019/01/17 Javascript
vue axios封装及API统一管理的方法
2019/04/18 Javascript
JS+html5实现异步上传图片显示上传文件进度条功能示例
2019/11/09 Javascript
js实现纯前端压缩图片
2020/11/16 Javascript
梳理一下vue中的生命周期
2020/12/30 Vue.js
[02:32]DOTA2亚洲邀请赛 C9战队出场宣传片
2015/02/07 DOTA
使用go和python递归删除.ds store文件的方法
2014/01/22 Python
python深度优先搜索和广度优先搜索
2018/02/07 Python
详解Python 装饰器执行顺序迷思
2018/08/08 Python
python实现给scatter设置颜色渐变条colorbar的方法
2018/12/13 Python
Python调用C语言的实现
2019/07/26 Python
Python 保持登录状态进行接口测试的方法示例
2019/08/06 Python
解决python彩色螺旋线绘制引发的问题
2019/11/23 Python
如何基于python实现脚本加密
2019/12/28 Python
如何利用python发送邮件
2020/09/26 Python
基于Python制作一副扑克牌过程详解
2020/10/19 Python
html5 乒乓球(碰撞检测)实例二
2013/07/25 HTML / CSS
英国鞋类及配饰零售商:Kurt Geiger
2017/02/04 全球购物
C/C++程序员常见面试题二
2015/11/19 面试题
学年自我鉴定
2014/01/16 职场文书
文明学生标兵事迹
2014/01/21 职场文书
大学生毕业鉴定
2014/01/31 职场文书
团队拓展活动总结
2014/08/27 职场文书
学生顶撞老师的检讨书
2014/09/17 职场文书
顶岗实习协议书
2015/01/29 职场文书
小班教师个人总结
2015/02/05 职场文书
go语言中http超时引发的事故解决
2021/06/02 Golang
Js类的构建与继承案例详解
2021/09/15 Javascript
MySQL限制查询和数据排序介绍
2022/03/25 MySQL