Я работаю с инструментом, который получает дамп базы данных для MySQL и Postgresql в сжатом файле .gz
. Это файл, который я экспортировал ранее без проблем (с использованием Python). Однако, когда мне нужно проверить импорт, это не работает.
Инструмент работает внутри док-контейнера. Мой код Python предоставляется,
def cmd_schema_import(self, args=None):
self.require_configured(with_containers=True)
compressed_import_file = os.path.join(self.project_path, "database", config['database_backup'])
# no file exist for the database import
if (not os.path.isfile(compressed_import_file)):
return
# run mysql dump
u, p, d = config['default_db_user'], config['default_db_pass'], config['default_db_name']
command = f'mysqldump -u {u} -p"{p}" {d}'
if self.project_conf["db_driver"] == "pgsql":
command = f'exec psql --quiet -U {u} -d "{d}"'
additional_options = "| gunzip < %s --keep" % compressed_import_file
self.docker.exec(self.db_container, command, additional_options)
Функция вызывает предоставленный метод докера,
def exec(self, container_target, command, additional_options=""):
""" execte docker exec commmand and return the stdout or None when error"""
cmd = """docker exec -i "%s" sh -c '%s' %s""" % (
container_target, command, additional_options)
if self.verbose:
print(cmd)
try:
cp = subprocess.run(cmd,
shell=True,
check=True,
stdout=subprocess.PIPE)
return cp.stdout.decode("utf-8").strip()
except Exception as e:
print(f"Docker exec failed command {e}")
return None
Я пытаюсь отладить код, но вот где он зависает
cp = subprocess.run(cmd,
shell=True,
check=True,
stdout=subprocess.PIPE)
Я ценю любые советы.