Мне по работе надо было написать программку которая делала бы резорвную копию 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

Комментарии закрыты.

Теперь у меня есть персональная страница на Я.ру — theblackravan!

Я.ру - это новый сервис Яндекса, на котором делятся с друзьями самым интересным, знакомятся, дружат или ссорятся, вывешивают фотки, комментируют свои, чужие записи, обмениваются ссылками и рассказывают о своем настроении.