Я пытаюсь сделать резервную копию Postgres из Python на Win10.
Я работаю над Anaconda python 3.8, машиной Win10 с локальным Postgres12. В переменной среды пути у меня есть postgres (lib и bin), без анаконды и python 3.8 (без анаконды).
Я могу правильно сделать резервную копию базы данных, используя командную оболочку окна :
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.run
или subprocess.call
I не вызывает ошибки, но созданный файл пуст.
Похоже, что ни os.system
, ни subprocess
в интерпретаторе anaconda не получили доступа к переменным окружения в командной оболочке. Как это возможно? и как я могу это побороть ?. Разве другой пользователь вызывает оболочку?
Заранее спасибо.