gpt4 book ai didi

python - 多次密码尝试 pg_dump python

转载 作者:行者123 更新时间:2023-11-28 18:18:03 27 4
gpt4 key购买 nike

我试图让我的脚本的用户在输入无效密码时提示用户输入正确的密码。我不确定这是一个 psql 配置还是通过使用 python 错误处理来完成的。我应该使用哪一个以及如何使用?我目前的代码如下:

 backup_ps = subprocess.Popen(
['pg_dump','-h', ORIGIN_DB, '-U', ORIGIN_DB_USER, ORIGIN_DB_NAME, '-f', destination, '-c',
'-t', 'table1',
'-Fp', '--inserts'],
stdout=subprocess.PIPE
)

output = backup_ps.communicate()[0]

# if password incorrect, prompt for correct password.

最佳答案

我在 FreeBSD 上运行 postgresql96。当我输入错误密码时,pg_dump 的返回码是 1,而不是 0。

一个天真的解决方案是将您的代码放在一个 while 循环中,如下所示:

while True:
backup_ps = subprocess.Popen(
['pg_dump','-h', ORIGIN_DB, '-U', ORIGIN_DB_USER, ORIGIN_DB_NAME, '-f', destination, '-c',
'-t', 'table1',
'-Fp', '--inserts'],
stdout=subprocess.PIPE
)

output = backup_ps.communicate()[0]
if backup_ps.returncode == 0:
break

问题是 pg_dump 可能会在出现任何错误时返回 1,包括分配内存或磁盘空间的系统调用失败时。所以这实际上并不意味着密码输入失败,您可能希望 Hook 在 n 尝试或使用其他方法后没有成功返回的情况下退出。

另一个解决方案可能是检查转储输出文件是否存在以及最近是否被修改过。您可能还想检查 stderr 以获取有关错误密码的错误消息。

我认为这些解决方案很老套。

最好的解决方案 (AFAICT) 是不使用单独的进程进行转储(因为与该进程通信可能会很痛苦),而是使用 Python 库,例如 psycopg2访问数据库。

关于python - 多次密码尝试 pg_dump python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47169151/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com