如何使用Python在虚拟环境中运行命令

2024-09-27 23:21:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经创建并安装了virutalenv。我还在virutal env中安装了jsnapy工具。在

这是我们正在使用的脚本:

Filename : venv.py 
import os
os.system('/bin/bash  --rcfile ~/TestAutomation/End2EndAutomation/bin/activate')
os.system('End2EndAutomation/bin/jsnapy')

ubuntu@server:~/TestAutomation$ python venv.py
(End2EndAutomation) ubuntu@sdno-server:~/TestAutomation$ ^C

我们需要知道的是,如何进入virutalenv,运行一个命令并使用python脚本停用它?在

[编辑1]

我使用了注释中给出的代码。它刚刚进入虚拟环境。当我发出exit时,它正在运行jsnapy命令。在

^{pr2}$

Tags: py命令env脚本binservervenvos
2条回答

os.system()的每次调用都将创建一个新的bash实例并终止前一个实例。要在一个bash实例中运行所有命令,可以将所有命令放在一个bash脚本中,并从^{调用该脚本

运行.sh

source ~/TestAutomation/End2EndAutomation/bin/activate
End2EndAutomation/bin/jsnapy
deactivate

Python

^{pr2}$

或者,您可以编写一个多行bash命令,只要它都在一个os.system()调用中。在

连续两次调用^{{cd1>}将创建两个独立进程,一个接着一个。第二个将在第一个结束时运行。在第一个进程中执行的命令的任何影响都将在第二次运行时被遗忘和刷新。

您希望运行激活和在同一进程中需要在Virtualev中运行的命令,即相同的单个shell实例。

为此,您可以使用^{{cd2>}运行一系列命令。见下文。

但是,一个更好的解决方案是从Python本身中激活虚拟环境。

p = os.path.expanduser('~/TestAutomation/End2EndAutomation/bin/activate_this.py')
execfile(p, dict(__file__=p))
subprocess.check_call(['./End2EndAutomation/bin/jsnapy'])

为了完整性,这里是Bash解决方案,并提供注释。

^{pr2}$

即使在^{} documentation中,也建议首选^{cd3>}而不是^{cd4>}。

当^{cd7>}命令完成时,不需要显式地^{{cd6>};这也将隐式地停用虚拟环境。

^{cd8}技巧是个不错的主意,但是当您调用的shell不交互时,它不会起作用。

相关问题 更多 >

    热门问题