python2.7执行shell脚本
来源:互联网 发布:淘宝网首页棉布 编辑:程序博客网 时间:2024/06/06 09:02
#!/usr/bin/env python# -*- coding: utf-8 -*-"""reated on 2017-11-12 @author: lichanling"""import shleximport datetimeimport subprocessimport timeimport calendar as cal"""执行一个SHELL命令 封装了subprocess的Popen方法, 支持超时判断,支持读取stdout和stderr 参数: cwd: 运行命令时更改路径,如果被设定,子进程会直接先更改当前路径到cwd timeout: 超时时间,秒,支持小数,精度0.1秒 shell: 是否通过shell运行 Returns: return_code Raises: Exception: 执行超时"""def execute_command(cmdstring, cwd=None, timeout=None, shell=False): if shell: cmdstring_list = cmdstring else: cmdstring_list = shlex.split(cmdstring) if timeout: end_time = datetime.datetime.now() + datetime.timedelta(seconds=timeout) #没有指定标准输出和错误输出的管道,因此会打印到屏幕上; sub = subprocess.Popen(cmdstring_list, cwd=cwd, stdin=subprocess.PIPE,shell=shell,bufsize=4096) #subprocess.poll()方法:检查子进程是否结束了,如果结束了,设定并返回码,放在subprocess.returncode变量中 while sub.poll() is None: time.sleep(0.1) if timeout: if end_time <= datetime.datetime.now(): raise Exception("Timeout:%s"%cmdstring) return str(sub.returncode)"""执行备份脚本"""def regul_backup(): #导出指定的数据库 database="apus" #导出表名称 import_tables = "" #指定备份输出文件名前缀,路径+文件名(会补上时间戳+.sql的后缀) back_out_file = "/路径/文件名" #日期格式化 FORMAT = "%d-%02d-%02d" # 年份 year = 2017 #获取上个月的月份 last_month = time.localtime()[1]-1 or 12 #定义开始月份 start_month = 0; #开始日 start_day = "" ; #开始时间 start_time = "00:00:00" ; #定义结束月份 end_month = 0; #结束日 end_day = ""; #结束时间 end_time = "23:59:59"; #未设置开始月份,则使用last_month定义的月份 if start_month == 0: start_month = last_month #未设置结束月份,则使用last_month定义的月份 if end_month == 0: end_month = last_month print "year:%s,start_month:%s,end_month:%s" %(year,start_month,end_month) # start_d = cal.monthrange(year, start_month) end_d = cal.monthrange(year, end_month) if start_day == "": start_day = 1 if end_day == "": end_day = end_d[1] # 获取开始日期 start_date = FORMAT % (year,start_month, start_day) # 获取结束日期 end_date = FORMAT %(year,end_month,end_day) #拼接备份脚本 back_shell ="mysqldump -ubkuser -pbk2017 -S /data/mysql/3308/tmp/mysql.sock -t --databases %(database)s --tables $(import_tables)s where time between unix_timestamp('%(start_date)s %(start_time)s') AND unix_timestamp('%(end_date)s %(end_time)s') > %(back_out_file)s%(start_date)s-%(end_date)s.sql" % {'database':database,'import_tables':import_tables,'start_date':start_date,'start_time':start_time,'end_date':end_date,'end_time':end_time,'back_out_file':back_out_file} print back_shell #执行备份脚本并将输出打印出来 #print execute_command(back_shell) #上传到aws upload_shell = "aws s3 cp %(back_out_file)s%(start_date)s-%(end_date)s.sql s3://apus-bigdata-spark/filterregister/" % {'back_out_file':back_out_file,'start_date':start_date,'end_date':end_date} print upload_shell #print execute_command(upload_shell)if __name__=="__main__": # 执行脚本示例 # print execute_command("ls") # 执行备份 regul_backup()
阅读全文
0 0
- python2.7执行shell脚本
- python2.7 执行cmd命令及shell命令封装方法
- php执行shell脚本
- 如何执行shell脚本
- shell脚本执行顺序
- Android 执行shell脚本
- android执行shell脚本
- Hadoop执行shell脚本
- Android执行shell脚本
- Android shell 脚本执行
- shell执行脚本
- Android执行shell脚本
- 如何执行shell脚本
- PHP执行shell脚本
- Android执行shell脚本
- ANT 执行SHELL脚本
- ios 执行shell脚本
- 后台执行shell脚本
- Mysql笔记1
- Android 蓝牙开发【二】BLE开发 (Android4.3)
- 关于ActiveMQ中Topic持久化配置问题
- MVP+retrofit和Rxjava请求数据+recyclerview展示
- 【vscode】vscode在windows与ubuntu下编译调试C/C++
- python2.7执行shell脚本
- 为什么你申请微信支付收到的邮件中没有PaySignKey?
- 无需其他工具就能进行远程控制
- Facebook 最热门的开源项目推荐!
- iOS 开发技术栈与进阶
- Android APP开发自测点
- HDOJ1248 寒冰王座
- 15 个有趣的 JS 和 CSS 库
- PostgreSQL 聚合函数讲解