Мне по работе надо было написать программку которая делала бы резорвную копию sql-базы. Выбрал для этого язык Python.
файл backupdb.py:
# -*- coding: cp866 -*- import os, sys from tbrlib import lang_detect from tbrlib import init if lang_detect.isRusOs(): from tbrlib.lang_ru import * else: from tbrlib.lang_en import * # Вывод шапки print sInfo mfile = "config.ini" mpath = os.getcwd()+"\"+mfile from tbrlib.init import * if os.path.isfile(mpath): initfile=init.isfound(mfile) if initfile!=None: print str(mpath).ljust(70)+sFileFound # print initfile.sections() else: if init.isnew(mfile): initfile=init.isfound(mfile) # print initfile.sections() try: dbfile = initfile.get('path','DBPath')+"\"+initfile.get('files','DBFile') conffile = initfile.get('path','ConfPath')+"\"+initfile.get('files','ConfFile') backupfile = initfile.get('path','BackUp')+"\"+initfile.get('files','BuckUpFile') prgfile = initfile.get('path','PrgPath')+"\"+initfile.get('files','PrgFile') except: print sConfFileError % mfile else: from datetime import date from tbrlib import lang_out now = date.today() if len(sys.argv)>1: bnum = sys.argv[1] dnow=str(now)+"-"+bnum backupfile=backupfile % dnow if lang_out.isredi(dbfile) and lang_out.isredi(conffile) and lang_out.isredi(prgfile): lang_out.isredi(backupfile) os.chdir(initfile.get('path','PrgPath')) os.execv(initfile.get('files','PrgFile'),['-B', '-T', '\"'+dbfile+'\"', '\"'+backupfile+'\"', '-USER SYSDBA', '-PAS masterkey']) os.wait() if lang_out.isredi(backupfile): print str(backupfile).ljust(70)+sDirCreate else: print sSysNotRedi % dbfile |
файл lang_detect.py
1 2 3 4 5 6 7 8 9 10 11 12 | # -*- coding: cp866 -*- import os,sys def isRusOs(): # Определение языка операционной сисемы if sys.platform != "win32": return 0 comspec = os.getenv ("ComSpec", None) if comspec is None: return 0 pin, pout = os.popen2 (comspec+" /c dir /w","t", -1) pin.close() outp = pout.read() pout.close() # возврат 1 если комманда ДИР отоброжает информацию на русском языке return outp.count ("одержимое папки") and outp.count ("свободно") |
файл init.py:
# -*- coding: cp866 -*- import os,sys from tbrlib import lang_detect if lang_detect.isRusOs(): from tbrlib.lang_ru import * else: from tbrlib.lang_en import * def isfound(cfilepath): try: cf=open(cfilepath) except IOError, exc: print sFileError % cfilepath return None else: from ConfigParser import * setupf=ConfigParser() setupf.readfp(cf,cfilepath) cf.close() return setupf #print setupf.sections() #print setupf.get("path","DBPath") def isnew(newfile): try: cnf=open(newfile,"w") except IOError, exc: print sNewFileError % newfile return 0 else: cnf.write('; Раздел путей до базыn') cnf.write('[path]n') cnf.write('DBPath=C:Program FilesStimateDataBasen') cnf.write('ConfPath=C:Program FilesStimateDataBasen') cnf.write('BackUp=C:Program FilesStimateBackUpn') cnf.write('PrgPath=C:Program FilesFireBirdbinn') cnf.write('; Раздел файлов базыn') cnf.write('[files]n') cnf.write('DBFile=Stimate_Budget70n.gdbn') cnf.write('ConfFile=Config_Budget70n_F.gdbn') cnf.write('BuckUpFile=backup-%s.gdkn') cnf.write('PrgFile=gbak.exen') cnf.close return 1 |
файл lang_ru.py:
12 13 14 15 16 17 18 19 20 21 22 23 24 | # -*- coding: cp866 -*- sInfo = "Программа резервного копирования базы данных. Версия 0.1" sYes = "[ Есть ]" sNo = "[ Нет ]" sFileFound = "[ Найден ]" sFileNoFound = "[ Не найден ]" sFileError = "Ошибка чтения файла конфигурации: %s" sNewFileError = "Ошибка создания файла конфигурации: %s с настройками по умолчанию" sConfFileError = "Файла конфигурации: %s поврежден" sSysNotRedi = "Отсутсвует параметр для создания резервной копии %s" sDirError = "Путь не найден: %s" sDirNotCreate = "[ Несоздан ]" sDirCreate = "[ Создан ]" |
файл lang_out.py:
# -*- coding: cp866 -*- import os from tbrlib import lang_detect if lang_detect.isRusOs(): from tbrlib.lang_ru import * else: from tbrlib.lang_en import * def isredi(sfile): sfiledir=os.path.dirname(sfile) if os.path.isdir(sfiledir): print str(sfiledir).ljust(70)+sFileFound if os.path.isfile(sfile): print str(sfile).ljust(70)+sFileFound return 1 else: print str(sfile).ljust(70)+sFileNoFound return 0 else: print str(sfiledir).ljust(70)+sFileNoFound from tbrlib import init afile = "config.ini" initfile=init.isfound(afile) bdir=initfile.get('path','BackUp') if sfiledir == bdir: try: os.mkdir(sfiledir) except: print str(sfiledir).ljust(70)+sDirNotCreate return 0 else: print str(sfiledir).ljust(70)+sDirCreate return 1 |
файл __init__.py:
3 4 5 | # -*- coding: cp866 -*- # Библиотека частоиспользуемых функций __all__ = ["lang_detect","lang_ru","lang_en","init","lang_out"] |
файл config.ini:
12 13 14 15 16 17 18 19 20 21 22 23 | ; Раздел путей до базы [path] DBPath=C:Program FilesStimateDataBase ConfPath=C:Program FilesStimateDataBase BackUp=C:Program FilesStimateBackUp PrgPath=C:Program FilesFireBirdbin ; Раздел файлов базы [files] DBFile=Stimate_Budget70n.gdb ConfFile=Config_Budget70n_F.gdb BuckUpFile=backup-%s.gdk PrgFile=gbak.exe |