python版本的仿windows计划任务工具
作者:宝宝巴士 发布时间:2021-06-09 03:55:07
标签:windows,计划任务,pthon
计划任务工具-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 原创,转载务必在明显处注明:(作者官方网站: 宝宝巴士 )
来源:https://www.cnblogs.com/superdo/p/4805826.html


猜你喜欢
- 本文全部操作均在windows环境下安装 PythonPython是一种跨平台的计算机程序设计语言,它可以运行在Windows、Mac和各种
- 我们准备如下两个表,并插入数据。#分类CREATE TABLE IF NOT EXISTS `type` (`id` INT(10) UNS
- 我们在制作网页时,有时会遇到这样的情况:根据用户的选择,显示不同的内容。比如,制作一个登录网页,上面有
- 前言后续还会更新更多优雅的规范。命名风格1. 【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。&n
- CacheControl 属性设置是否可缓存由 ASP 生成的输出。默认地,代理服务器不会保持缓存副本。语法:response.CacheC
- 字符串字符串常用操作拼接字符串拼接字符串需要使用‘+’运算符可完成对多个字符串的拼接。如str =
- 导言到目前为止,我们探讨的教程是由表现层,业务逻辑层和数据访问层构成的层次体系结构。数据访问层和业务逻辑层分别在教程第一和第二章提到。在Di
- 元组:# 元组,一种不可变的序列,在创建之后不能做任何的修改# 1.不可变# 2.用()创建元组类型,数据项用逗号来分割# 3.可以是任何的
- PHP5.4才支持JSON_UNESCAPED_UNICODE这个参数,此参数是让中文字符在json_encode的时候不用转义,减少数据传
- 本文实例为大家分享了python爬取微信公众号文章的具体代码,供大家参考,具体内容如下# -*- coding: utf-8 -*-impo
- 在使用flask部署Keras,tensorflow等框架时候,经常出现FailedPreconditionError: Attemptin
- 经过dom层层注释缩小反馈终于找到问题所在。问题经过我在弹起弹窗的时候,设置了popupVisible为true然后触发了vue的updat
- 一、Python的字典在项目的开发过程中,如果遇到有映射关系的内容可以考虑使用Python中的字典进行存储数据,字典中冒号前的数据称为【键】
- Vue.js 使用v-cloak后仍显示变量的解决方法v-cloak 这个指令是防止页面加载时出现 vuejs 的变
- 显示下级的方法elementui的节点过滤默认是不显示下级的代码在 :filter-node-method="filterNode
- *****看一下我定义的change()和run()函数******绘图坐标体系:作用:设置主窗体的大小和位置turtle.setup(wi
- 第一步:下载一个JDBC驱动包,例如我用的是:mysql-connector-java-5.1.17-bin.jar第二步:导入下载的JDB
- 一、背景大家都知道gevent的机制是单线程+协程机制,当遇到可能会阻塞的操作时,就切换到可运行的协程中继续运行,以此来实现提交系统运行效率
- 将pandas.DataFrame,pandas.Series的索引设置为datetime64 [ns]类型时,将其视为DatetimeIn
- 在最近的项目中,需要做到一个时间,就是用户离开页面的时候,我需要缓存页面其中一部分的内容,但是我不需要用户刷新的时候也缓存,我只希望在我用户