我有两个完全独立的数据库,它们运行在完全不同的Django项目中。在一个项目中,有一个脚本可以分析数据并将结果输出为CSV。在另一个项目中,有一个脚本可以获取该CSV并将其结果输入到其数据库中。
我想要做的是自动化这个过程,当我运行分析脚本并输出CSV时,然后我调用第二个项目的数据库脚本并让它将新的CSV数据导入其数据库
现在显而易见的事情是导入,但由于它是一个django项目,这会导致很多问题,主要是设置文件丢失,数据库导入错误,等等。
我尝试将其作为子进程运行,如下所示:
subprocess.call("cd {0}\n python database2_import.py".format(project2_dir), shell=True)
但这也没有奏效,强烈建议反对。 我收到一条错误,指出它无法导入project1设置,因为我正在尝试运行project2脚本,这令人困惑。
ImportError: Could not import settings 'project1.settings' (Is it on sys.path? Is there an import error in the settings file?): No module named project1.settings
实现这一目标的最佳方式是什么?
基本上我只想运行等价的" python database2_import.py"来自project' s_1脚本。
答案 0 :(得分:0)
我发现要使子进程方法起作用,您需要指定正确的环境。由于子进程是从project1的脚本运行的,即使它正在尝试运行project2的脚本,它仍然使用项目1中的环境。
只需将适当的环境作为参数分配给subprocess.Popen。
import subprocess
my_env = os.environ
my_env["DJANGO_SETTINGS_MODULE"] = "Project2.settings"
command = "cd {0}\n python python database2_import.py".format(project2_dir)
result = subprocess.Popen(command, shell=True, env=my_env)
话虽这么说,我仍然宁愿不使用子进程方法,所以在将此标记为答案之前我会坚持下去。