我正在尝试为PostgreSQL DB创建一个自动的pg dump备份脚本。该脚本要求输入数据库密码。我正在尝试使用stdin输入密码。但是,它不起作用。 'popen.stdin.write(“ rootVidhyaDhan123#!\ n”)',此行未将密码插入脚本终端。
import gzip
import subprocess
with gzip.open('backup.gz', 'wb') as f:
popen = subprocess.Popen(['pg_dump', '--no-owner', '--no-acl', '-U', 'postgres', '-d', 'database_name', '-h', '178.111.11.111'], stdout=subprocess.PIPE, stdin=subprocess.PIPE, universal_newlines=True)
time.sleep(5)
popen.stdin.write("rootVidhyaDhan123#!\n") # code not working
for stdout_line in iter(popen.stdout.readline, ""):
f.write(stdout_line.encode('utf-8'))
popen.stdin.close()
popen.stdout.close()
popen.wait()
可能是pg_dump试图从/ dev / tty而不是从stdin中读取密码。
而不是使用stdin,而是设置PGPASSWORD
环境变量或创建.pgpass
文件。详细信息在这里:How to pass in password to pg_dump?