使用两个不同的env在其他python脚本中调用python脚本

时间:2018-09-28 23:20:17

标签: python django virtualenv

我有两个不同的Django应用程序,都使用Python 3.6 64位在同一Linux服务器(Ubuntu 18.04 LTS)上运行。

应用A 在Django 1.11和 virtualenv A 中运行。

应用B 在Django 2.1和 virtualenv B 中运行。

App B 中,我需要调用一个函数在 App A 中迁移表,当我在shell中运行命令时,一切正常。

/path/to/envA/python /path/to/appA/manage.py migrate

但是,当我尝试使用 subprocess 在App B内部中运行同一命令时,出现了无模块错误,我怀疑这是因为不同的环境。

这是我在应用B中的代码:

subprocess.Popen(["/path/to/envA/python", "/path/to/appA/manage.py", "migrate"], 
                 stdin=subprocess.PIPE,
                 stdout=subprocess.PIPE,
                 stderr=subprocess.PIPE)

我尚未尝试使用shell=True,但这无法正常工作并冻结控制台。

1 个答案:

答案 0 :(得分:1)

我能够通过在env函数中传递Popen变量来解决此问题:

subprocess.Popen(["/path/to/envA/python", "/path/to/appA/manage.py", "migrate"], 
                 stdin=subprocess.PIPE,
                 stdout=subprocess.PIPE,
                 stderr=subprocess.PIPE,
                 env={"PATH": "/path/to/envA/python"})