python2 7執行shell指令碼

2021-08-12 00:24:34 字數 3201 閱讀 4005

#!/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...