Python子进程错误:使用stdin将输入传递给终端

时间:2020-05-19 14:20:22

标签: python python-3.x postgresql subprocess stdin

我正在尝试为PostgreSQL DB创建自动pg dump备份脚本。该脚本要求输入数据库密码。我正在尝试使用标准输入密码。但是,它不起作用。 'popen.stdin.write(“ rootpasswordhere123#!\ 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()

1 个答案:

答案 0 :(得分:1)

可能pg_dump试图从/dev/tty而不是从stdin读取密码。

设置PGPASSWORD环境变量(os.environ['PGPASSWORD'] = '...')或创建一个.pgpass文件,而不是使用stdin。此处的详细信息:How to pass in password to pg_dump?

相关问题