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

假设我在2种不同的虚拟环境中安装了2个不同版本的应用程序. myapp v1.0和myapp v2.0.现在我想比较一下.比较是用python本身编写的.最好的方法是什么?我们假设我可以单独运行它们并且都写一个输出文件,我可以稍后比较...

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

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

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

编辑:

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

source virtualenv1/bin/activate
python my_script.py
deactivate

source virtualenv2/bin/activate
python my_other_script.py
deactivate

python my_comparison_script.py

相反,我只想这样做:

python my_comparison_script.py

我的脚本将在此内部运行.

解决方法:

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

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)可能如下所示:

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()

本文标题为:使用python在不同的virtualenv中运行子进程

基础教程推荐