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性能优化技巧
Mar 09 Python
python获得linux下所有挂载点(mount points)的方法
Apr 29 Python
Python数据类型详解(三)元祖:tuple
May 08 Python
Python中字符串格式化str.format的详细介绍
Feb 17 Python
Python实现类的创建与使用方法示例
Jul 25 Python
Python线程创建和终止实例代码
Jan 20 Python
python实现输入的数据在地图上生成热力图效果
Dec 06 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
Jan 04 Python
python实现用类读取文件数据并计算矩形面积
Jan 18 Python
Python+unittest+requests 接口自动化测试框架搭建教程
Oct 09 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
Dec 21 Python
Python+MySQL随机试卷及答案生成程序的示例代码
Feb 01 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 分库分表hash算法
2009/11/12 PHP
PHP数据类型之整数类型、浮点数的介绍
2013/04/28 PHP
PHP针对多用户实现更换头像功能
2016/09/04 PHP
php+js实现裁剪任意形状图片
2018/10/31 PHP
js实现GridView单选效果自动设置交替行、选中行、鼠标移动行背景色
2010/05/27 Javascript
javascript多种数据类型表格排序代码分析
2010/09/11 Javascript
jQuery实现用方向键控制层的上下左右移动
2013/01/13 Javascript
给应用部分的js代码设定一个统一的入口
2014/06/15 Javascript
node.js中的fs.realpath方法使用说明
2014/12/16 Javascript
javascript中函数作为参数调用的方法
2015/02/09 Javascript
jQuery EasyUI Dialog拖不下来如何解决
2015/09/28 Javascript
JavaScript实现form表单的多文件上传
2020/03/27 Javascript
详解angularJs中关于ng-class的三种使用方式说明
2017/06/02 Javascript
微信JS SDK接入的几点注意事项(必看篇)
2017/06/23 Javascript
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
2017/10/24 Javascript
[01:45]2014DOTA2 TI预选赛预选赛 战前探营!
2014/05/21 DOTA
python使用百度翻译进行中翻英示例
2014/04/14 Python
python字符串排序方法
2014/08/29 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
2017/08/30 Python
Django 表单模型选择框如何使用分组
2019/05/16 Python
详解Python中的正斜杠与反斜杠
2019/08/09 Python
Django中使用haystack+whoosh实现搜索功能
2019/10/08 Python
wxpython+pymysql实现用户登陆功能
2019/11/19 Python
基于python的opencv图像处理实现对斑马线的检测示例
2020/11/29 Python
pandas针对excel处理的实现
2021/01/15 Python
python爬取2021猫眼票房字体加密实例
2021/02/19 Python
德国家具在线:Fashion For Home
2017/03/11 全球购物
10条PHP编程习惯
2014/05/26 面试题
25道Java面试题集合
2013/05/21 面试题
店长岗位的工作内容
2013/11/12 职场文书
人事助理岗位职责
2013/11/18 职场文书
工艺工程师工作职责
2013/11/23 职场文书
社区消防工作实施方案
2014/03/21 职场文书
单位接收函范文
2015/01/30 职场文书
Go使用协程交替打印字符
2021/04/29 Golang
使用ICOM IC-R9500接收机同时测评十台收音机中波接收性能
2022/05/10 无线电