我正在尝试从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.run
或subprocess.call
不产生错误,但是创建的文件为空。
看来,anaconda解释器os.system
或subprocess
anaconda解释器都无法访问命令外壳程序上的环境变量。这怎么可能?以及我该如何克服?是不同的用户调用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] 删除。
我来说两句