我有两个不同的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
,但这无法正常工作并冻结控制台。
答案 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"})