首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子进程popen与虚拟环境的交互

子进程popen与虚拟环境的交互
EN

Stack Overflow用户
提问于 2017-12-13 18:18:37
回答 3查看 2.4K关注 0票数 0

我正在使用virtualenv运行一个脚本,该脚本使用子进程popen运行另一个程序,该程序需要系统范围的python和原始环境变量。如何防止virtualenv影响它?

EN

回答 3

Stack Overflow用户

发布于 2017-12-13 20:28:45

您可以使用env=为子流程传入修改后的PATH

代码语言:javascript
复制
from subprocess import Popen
from os import environ
from os.path import join as path_join

myenv = environ.copy()
if 'VIRTUAL_ENV' in environ:
    myenv['PATH'] = ':'.join(
        [x for x in environ['PATH'].split(':')
            if x != path_join(environ['VIRTUAL_ENV'], 'bin')])
Popen(['command', '--with', 'arguments'], env=myenv)
票数 2
EN

Stack Overflow用户

发布于 2017-12-13 18:38:48

virtualenv会创建python可执行文件的副本,您可以将其激活到当前的shell中:

这将更改您的$PATH,以便它的第一个条目是virtualenv的bin/目录。(您必须使用source,因为它会就地更改您的shell环境。)这就是它所做的一切;它纯粹是一种便利。如果您直接从virtualenv的bin/目录(例如path/to/ENV/bin/pip或/path/to/ENV/bin/ python -script.py)运行脚本或python解释器,则无需激活。

因此,当我为我的项目在一个virtualenv中激活python时,将会使用它:

代码语言:javascript
复制
gonczor@wiktor-papu:~/Projects/papukurier/papukurier$ source ../venv/bin/activate
(venv) gonczor@wiktor-papu:~/Projects/papukurier/papukurier$ which python
/home/gonczor/Projects/papukurier/venv/bin/python
(venv) gonczor@wiktor-papu:~/Projects/papukurier/papukurier$ python
Python 2.7.14 (default, Sep 23 2017, 22:06:14) 
[GCC 7.2.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.executable
'/home/gonczor/Projects/papukurier/venv/bin/python'
>>> 

但同时,您可以提供在您的计算机上执行任何其他python实例的完整路径:

代码语言:javascript
复制
(venv) gonczor@wiktor-papu:~/Projects/papukurier/papukurier$ /usr/bin/python
Python 2.7.14 (default, Sep 23 2017, 22:06:14) 
[GCC 7.2.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.executable
'/usr/bin/python'
>>> 
票数 1
EN

Stack Overflow用户

发布于 2017-12-13 18:26:26

我相信subprocess不会关心你。

代码语言:javascript
复制
subprocess.run('/path/to/system/python program.py', stdout=PIPE, stderr=PIPE)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47790526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档