首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用python在不同的virtualenv中运行子进程

使用python在不同的virtualenv中运行子进程
EN

Stack Overflow用户
提问于 2011-11-08 23:33:40
回答 2查看 28.6K关注 0票数 36

假设我有两个不同版本的应用程序安装在两个不同的虚拟环境中。myapp v1.0和myapp v2.0。

现在,我想将它们进行比较。比较是用python本身编写的。最好的方法是什么?让我们假设我可以单独运行它们,并且它们都编写了一个输出文件,稍后我可以对其进行比较。

要做到这一点,一种方法是编写一个bash脚本(这就是我目前拥有的)。我激活一个virtualenv,运行myapp v1.0,激活另一个virtualenv,运行myapp v2.0。稍后,对这些文件运行一个比较模块。但我想在那里添加一些更多的动态(采用一些可选的参数等),这在python中会更容易。

编辑:

目前我有类似的东西( bash脚本):

代码语言:javascript
复制
source virtualenv1/bin/activate
python my_script.py
deactivate

source virtualenv2/bin/activate
python my_other_script.py
deactivate

python my_comparison_script.py

相反,我只想这样做:

代码语言:javascript
复制
python my_comparison_script.py

我的脚本将在其中运行。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-08 23:44:17

问题到底是什么?如何使用子进程执行shell命令?如果是这样的话,一些简单的伪代码可能看起来像这样:

代码语言:javascript
复制
import subprocess

myProcess = subprocess.Popen(   ['these', 'are', 'for', 'the', 'shell'],
                                stdout=subprocess.PIPE,
                                stderr=subprocess.PIPE )

[outStream, errStream] = myProcess.communicate()

然后你可以用标准输出(outStream)做任何你想做的事情,如果errStream存在的话还可以做不同的事情(标准错误)。这包括将标准输出或标准错误写入文件。那我猜你会把这些文件换掉吧?

一个实际的代码示例(假设您在linux系统上有python 2.6+ )可能如下所示:

代码语言:javascript
复制
import subprocess

with open('dateHelp.log', 'w') as dateLog:
    with open('dateHelp.err', 'w') as errLog:
        dateHelp = subprocess.Popen([ 'date', '-h'], stdout=dateLog, 
                                                     stderr=errLog)
        dateHelp.communicate()
票数 -12
EN

Stack Overflow用户

发布于 2018-08-03 06:48:03

一个简单的选项是使用子进程运行一系列命令,如下所示(请注意,shell=True是有风险的,只有在可以控制输入的情况下才应该使用)。

代码语言:javascript
复制
import subprocess
    
cmd = 'source activate my_virtualenv; python my_script.py'
subprocess.call(cmd, shell=True, executable='/bin/bash')

并根据需要重复。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8052926

复制
相关文章

相似问题

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