在Win10上从Python备份Postgres

以色列罗德里格斯:

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

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

我可以使用on window的命令外壳正确备份数据库:

pg_dump --dbname=postgresql://postgres:[email protected]:5432/test > C:\backup\dumpfile3.dump

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

os.system("pg_dump --dbname=postgresql://postgres:[email protected]:5432/test > C:\backup\dumpfile3.dump"  ) 

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

使用:

import subprocess
stk= 'pg_dump --dbname=postgresql://postgres:[email protected]: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:[email protected]: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.systemsubprocessanaconda解释器都无法访问命令外壳程序上的环境变量。这怎么可能?以及我该如何克服?是不同的用户调用shell吗?

提前致谢。

以色列罗德里格斯:

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

import os
os.system("pg_dump --dbname=postgresql://postgres:[email protected]: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:[email protected]:5432/test > C:\backup\dumpfile3.dump

我认为问题在于anaconda解释器需要重新启动系统才能访问环境变量(postgres变量所在的位置),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"就像控制台消息一样,它几乎没有意义

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章