gpt4 book ai didi

python - 在 Win10 上从 Python 备份 Postgres

转载 作者:行者123 更新时间:2023-12-04 15:21:11 26 4
gpt4 key购买 nike

我正在尝试在 Win10 上从 Python 备份 Postgres。

我正在使用 Anaconda python 3.8,Win10 机器和本地 Postgres12。在路径环境变量上,我有 postgres(lib 和 bin),没有 anaconda 和 python 3.8(没有 anaconda)。

我能够使用窗口的命令 shell 正确备份数据库:

pg_dump --dbname=postgresql://postgres:password@127.0.0.1:5432/test > C:\backup\dumpfile3.dump

但是当我在 anaconda 上运行它时:

os.system("pg_dump --dbname=postgresql://postgres:password@127.0.0.1:5432/test > C:\backup\dumpfile3.dump"  ) 

我得到输出 1 ,女巫是错误代码。它创建了文件,但它是空的。

使用:

import subprocess
stk= 'pg_dump --dbname=postgresql://postgres:password@127.0.0.1:5432/test > C:\backup\dumpfile3.dump'

try:
subprocess.check_output(stk, shell=True, stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as e:
raise RuntimeError("command '{}' return with error (code {}): {}".format(e.cmd, e.returncode, e.output))

我明白了:

RuntimeError: command 'pg_dump --dbname=postgresql://postgres:password@127.0.0.1:5432/test > C:\backup\dumpfile3.dump' return with error (code 1): b"'pg_dump' is not recognized as an internal or external command,\r\noperable program or batch file.\r\n"

如果我使用:subprocess.runsubprocess.call 我不会产生错误,但创建的文件是空的。

似乎 anaconda 解释器上的 os.systemsubprocess 都无法访问命令 shell 上的环境变量。这怎么可能?我该如何克服它?是不同的用户调用了 shell?

提前致谢。

最佳答案

重新启动计算机,问题解决了...。路径没有变化,我相信从安装东西(python,postgres,......)的那一刻起,机器就没有重新启动。

import os
os.system("pg_dump --dbname=postgresql://postgres:password@127.0.0.1:5432/test > C:\backup\dumpfile3.dump" )

成功了!,并且

import subprocess
subprocess.call(r"C:\some\path\backup.bat")

也有效! backup.bat 里面是:

pg_dump pg_dump --dbname=postgresql://postgres:password@127.0.0.1:5432/test > C:\backup\dumpfile3.dump

我想问题是 anaconda 解释器需要重新启动系统才能访问环境变量(postgres 变量所在的位置),因为 return with error (code 1): b “'pg_dump' 未被识别为内部或外部命令,\r\不可运行的程序或批处理文件。\r\n” 看起来像控制台消息。

如果有人有更好的解释,欢迎。

关于python - 在 Win10 上从 Python 备份 Postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63299534/

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