gpt4 book ai didi

python - 如何使用子进程在当前激活的 virtualenv 中运行 python 代码?

转载 作者:太空宇宙 更新时间:2023-11-04 09:43:45 26 4
gpt4 key购买 nike

我有一个名为 'venv' 的 virtualenv,它是激活的:

(venv)>

然后我编写了将在 virtualenv 中运行的代码 (main.py):

import subprocess
result = subprocess.run('python other.py', stdout=subprocess.PIPE)

但是当我运行 main.py 文件时:

(venv)> python main.py

subprocess 不在 virtualenv 即 venv

中执行命令 ( python other.py)

如何在当前 virtualenv session 中运行 subprocess 命令?

最佳答案

如果没有父进程的参与,子进程无法在其父进程中运行命令。

这就是为什么 ssh-agent 需要使用 eval "$(ssh-agent -s)" 来调用它在输出时发出的 shell 命令,例如。因此,您在这里要求的字面上的东西是不可能的。

幸运的是,这也是不必要的。


virtualenvs 使用子进程继承的环境变量。

这意味着您实际上不需要使用激活了 virtualenv 的同一个 shell 来启动一个旨在使用解释器/库/等的新 Python 解释器。来自那个 virtualenv。


subprocess.run 必须传递一个 list,或者必须使用 shell=True

要么这样做(哪个更好!)

import subprocess
result = subprocess.run(['python', 'other.py'], stdout=subprocess.PIPE)

或者这个(哪个更糟!)

import subprocess
result = subprocess.run('python other.py', stdout=subprocess.PIPE, shell=True)

关于python - 如何使用子进程在当前激活的 virtualenv 中运行 python 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50631577/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com