#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""reated on 2017-11-12
@author: lichanling
"""import shlex
import datetime
import subprocess
import time
import 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
or12
#定義開始月份
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" %
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/" %
print upload_shell
#print execute_command(upload_shell)
if __name__=="__main__":
# 執行指令碼示例
# print execute_command("ls")
# 執行備份
regul_backup()
python2 7換行 Python2 7基礎語法
1.建立檔案xx.py usr bin python3 print hello,world 2.linux下執行 python hello.py 3.編碼 預設字串unicode 設定編碼 coding utf 8 4.識別符號 第乙個字元必須是字母表中字母或下劃線 識別符號的其他的部分有字母 數字...
python2 7是什麼 python2 7是什麼
pyton2.7是python在2010年發布的乙個版本。python 是乙個高層次的結合了解釋性 編譯性 互動性和物件導向的指令碼語言,具有很強的可讀性,相比其他語言經常使用英文關鍵字,其他語言的一些標點符號,它具有比其他語言更有特色語法結構。下面來解釋一下python這門語言 python是一種...
python2 7中文編碼 python2 7
我從外部api中獲得了乙個字串 u4ece u8d77 u70b9 u5411 u6b63 u5357 u65b9 u5411 u51fa u53d1,u884c u9a76170 u7c73,u76f4 u884c u8fdb u5165 u4e2d u5173 u6751 u4e1c u8def...