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

假设我在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()