Модуль подпроцесса Python |Postgres pg_dump с паролем - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть база данных, для которой я хочу создать резервную копию с моим кодом Python.

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

Мой код приведен ниже:

from subprocess import Popen, PIPE
from pathlib import Path, PureWindowsPath

def backup():
    version = 11
    postgresDir = Path("C:/Program Files/PostgreSQL/{}/bin/".format(version))
    directory = PureWindowsPath(postgresDir)
    filename = 'myBackUp2'  # output filename here
    saveDir = Path("D:/Desktop/{}.tar".format(filename))  # output directory here
    file = PureWindowsPath(saveDir)

    host = 'localhost'
    user = 'postgres'
    port = '5434'
    dbname = 'database_name'  # database name here
    proc = Popen(['pg_dump', '-h', host, '-U', user, '-W', '-p', port,
                   '-F', 't', '-f', str(file), '-d', dbname],
                    cwd=directory, shell=True, stdin=PIPE)
    proc.wait()

backup()

Код вышеработает и создается резервная копия - я набираю пароль.Я попытался заменить proc.wait() приведенным ниже кодом, чтобы устранить необходимость ввода пароля вручную:

return proc.communicate('{}\n'.format(database_password))

Но я получил бы эту ошибку:

TypeError: требуется байтоподобный объект, а не 'str'

Возможно ли это сделать в подпроцессе?Если да, то как?

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Самое простое - использовать переменную окружения PGPASSWORD .

0 голосов
/ 02 февраля 2019

Используйте файл пароля.

В Microsoft Windows файл называется %APPDATA%\postgresql\pgpass.conf (где %APPDATA% относится к подкаталогу Application Data в профиле пользователя).

и параметр командной строки -w или --no-password (вместо -W)

-w

--no-password

Никогда не вводите запрос пароля.Если серверу требуется аутентификация по паролю, а пароль недоступен другими способами, такими как файл .pgpass, попытка подключения завершится неудачно.Эта опция может быть полезна в пакетных заданиях и сценариях, где нет ни одного пользователя для ввода пароля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...