在 Paramiko 的 Windows SSH 服务器上执行命令 (pg_dump) 之前设置环境变量 (PGPASSWORD)

Set environment variable (PGPASSWORD) before executing a command (pg_dump) on Windows SSH server in Paramiko

我想通过 SSH 连接到 Windows Server 2019 创建我的 postgres 数据库的备份。我使用 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 中执行命令会产生所需的输出。 有谁知道如何解决这个问题?感谢您的帮助!

这基本上就是这个问题:
Execute multiple commands in Paramiko so that commands are affected by their predecessors.

唯一的区别是您在 Windows 上,其中 set 甚至包括变量值的训练空间。所以请确保密码和 &&:

之间没有空格
SET PGPASSWORD=secret_pw&&pw_dump