使用两个不同的环境在其他 python 脚本中调用 python 脚本
Calling a python script inside other python script using two different envs
我有两个不同的 Django 应用程序,都在同一个 Linux 服务器中 运行ning(Ubuntu 18.04 LTS),使用 Python 3.6 64 位。
app A 在 Django 1.11 中 运行ning 和 virtualenv A.
app B 在 Django 2.1 中 运行ning 和 virtualenv B.
在 App B 我需要调用一个函数来迁移 App A 中的表,当我 运行 shell 中的命令一切正常。
/path/to/envA/python /path/to/appA/manage.py migrate
但是当我尝试 运行 使用 subprocess 在 App B 中执行相同的命令 时,我有一个 没有模块错误,我怀疑这是因为不同的envs.
这是我在 App B 中的代码:
subprocess.Popen(["/path/to/envA/python", "/path/to/appA/manage.py", "migrate"],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
我还尝试过使用 shell=True
但这不起作用并冻结了我的控制台。
我能够通过在 Popen
函数中传递 env
变量来解决这个问题:
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"})
我有两个不同的 Django 应用程序,都在同一个 Linux 服务器中 运行ning(Ubuntu 18.04 LTS),使用 Python 3.6 64 位。
app A 在 Django 1.11 中 运行ning 和 virtualenv A.
app B 在 Django 2.1 中 运行ning 和 virtualenv B.
在 App B 我需要调用一个函数来迁移 App A 中的表,当我 运行 shell 中的命令一切正常。
/path/to/envA/python /path/to/appA/manage.py migrate
但是当我尝试 运行 使用 subprocess 在 App B 中执行相同的命令 时,我有一个 没有模块错误,我怀疑这是因为不同的envs.
这是我在 App B 中的代码:
subprocess.Popen(["/path/to/envA/python", "/path/to/appA/manage.py", "migrate"],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
我还尝试过使用 shell=True
但这不起作用并冻结了我的控制台。
我能够通过在 Popen
函数中传递 env
变量来解决这个问题:
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"})