2016-12-13 11 views
1

Я пишу скрипт Python, который выполнит pg_restore. Как только восстановление завершится, я хотел бы, чтобы скрипт Python выполнял несколько операторов CREATE и GRANT для создания пользователей БД.Как программировать, когда завершается pg_restore

* Я не могу использовать pg_dumpall, чтобы добавить их в дамп, поскольку я переношу из AWS, а pg_dumpall запрещен. Таким образом, мне пришлось снять индивидуальные привилегии и написать сценарий с использованием шаблона/словаря, чтобы сделать это для меня.

** Мой вопрос: есть ли способ для моего скрипта Python проверить, что команда pg_restore завершена, чтобы она могла перейти к следующей части кода? Прямо сейчас, как только pg_restore стартует, он немедленно возвращается с УСПЕХОМ. Я ничего не смог найти. Обычно, в SQL Server, я WAITFOR DELAY в цикле, когда мне нужно что-то ждать (обычно JobAgent).

Спасибо

+0

Привет всем. Просто натыкайтесь на вершину. Может кто-нибудь, пожалуйста, помогите мне с этим вопросом? Я на самом деле застрял, и у меня не было возможности попросить Google о помощи в этом вопросе. Спасибо – Wendy

+0

Привет всем. Натыкается на вершину снова. Кто-нибудь знает, как мой скрипт Python может программно сказать, когда pg_dump завершил обработку? Я использую subprocess.Popen для выполнения команды pg_dump. Есть ли другой способ, который я мог бы использовать, чтобы заставить его приостановить работу до тех пор, пока команда не завершится? – Wendy

+0

Похоже, это гораздо более простое решение, чем я думал. Я собираюсь поделиться своим решением здесь, в случае, если кто-то еще встретит это сообщение с похожим вопросом. Вместо использования subprocess.Popen для выполнения команды pg_dump, мне нужно было использовать subprocess.check_call. В документе [doc] (https://docs.python.org/3.4/library/subprocess.html) он явно говорит: «Запустите команду с аргументами. Дождитесь завершения команды. Если код возврата был равен нулю, тогда верните, иначе поднять CalledProcessError. " – Wendy

ответ

0

Я добавил это как выше комментарий, но это более заметным, как ответ.

Похоже, что это намного проще, чем я думал. Я собираюсь поделиться своим решением здесь, в случае, если кто-то еще встретит это сообщение с похожим вопросом. Вместо использования subprocess.Popen для выполнения команды pg_restore мне нужно было использовать subprocess.check_call. В doc, это явно говорит за subprocess.check_call: «команду с аргументами Run Ждите команды для завершения Если код возврата равен нулю, то вернуться, иначе поднять CalledProcessError..»

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

 Смежные вопросы

  • Нет связанных вопросов^_^