Установите переменную среды (PGPASSWORD) перед выполнением команды (pg_dump) на сервере Windows S SH в Paramiko - PullRequest
1 голос
/ 05 марта 2020

Я хочу создать резервную копию моей базы данных postgres через S SH, подключенную к Windows Серверу 2019. Для этого я использую библиотеку Paramiko Python, но, к сожалению, sql - файл не содержит никаких данных (размер файла равен 0, и файлы не могут быть удалены, поскольку они все еще открыты в cmd). Таким образом, я подозреваю, что выполнение моей команды еще не закончено ... Это моя функция:

def ssh_server(server, username, password, pg_pass, ps_user, database):

    client = paramiko.SSHClient()
    client.load_system_host_keys()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    client.connect(hostname=server, username=username, password=password)

    stdin_2, stdout_2, stderr_2 = client.exec_command("SET PGPASSWORD=secret_pw")

    stdin, stdout, stderr = client.exec_command(
        "pg_dump -U {} {} > kp_{}.sql\n".format(
            ps_user, database, ts_str), get_pty=True)

    client.close()

Кстати: выполнение команд в PuTTY дает желаемый результат. У кого-нибудь есть идеи, как решить эту проблему? Спасибо за вашу помощь!

1 Ответ

1 голос
/ 09 марта 2020

Это в основном вопрос:
Выполнить несколько команд в Paramiko, чтобы на команды влияли их предшественники .

Единственное отличие состоит в том, что вы находитесь на Windows где set включает четные пробелы в значение переменной. Поэтому убедитесь, что между паролем и &&:

SET PGPASSWORD=secret_pw&&pw_dump
нет пробелов
...