Я разрабатываю скрипт для автоматизации mysql создания базы данных и пользователя базы данных. Он принимает аргументы -o -dp -dr, введенные в оболочку, создает скрипт sql со следующими аргументами (-o и -dp) и выполняет этот скрипт с паролем root (-dr)
from sys import argv
from os import makedirs,system
etc = '/mnt/storage/'
def show_usage():
print("""
Create new DB and DB user
-o object_name
-dp db user password
-dr mysql root user password
""")
exit(1)
def create_template(object_name, password):
out = """
%s template %s example %s %s %s %s
"""%(object_name,object_name,password,object_name,object_name)
return out
def write_to_sql(object_name, db_password):
sql_script = open(etc+'new_db_and_user.sql','w+')
script_to_write = create_template(object_name,db_password)
sql_script.write(script_to_write)
def execute_sql_script(root_password):
run_sql_script = "mysql --username=root --password=%s < new_db_and_user.sql"%(root_password)
remove_sql_script = "rm -f new_db_and_user.sql"
system(run_sql_script)
system(remove_sql_script)
try:
opts, args = getopt.getopt(argv[1:], "hd:s:", ["object_name=","db_password=", "root_password="])
except getopt.GetoptError as err:
print(str(err))
if opts.__len__() == 0:
show_usage()
object_name=None
password=None
root_password=None
for option, value in opts:
if option in ('-o', '--object_name'):
object_name = value
elif option in ('-dp', '--db_password'):
password = value
elif option in ('-dr', '--root_password'):
root_password = value
else:
print("Unknown parameter used")
show_usage()
write_to_sql(object_name,password)
execute_sql_script(root_password)
Проблема
Когда я выполняю этот скрипт с помощью следующей команды
python create_db.py -o test -dp papa -dr nana
Я получаю сообщение об ошибке:
option -o not recognized
Traceback (most recent call last):
File "create_db.py", line 43, in <module>
if opts.__len__() == 0:
NameError: name 'opts' is not defined
Не могли бы вы мне помочь?