假设我有两个不同版本的应用程序安装在两个不同的虚拟环境中。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
我的脚本将在其中运行。
发布于 2011-11-08 23:44:17
问题到底是什么?如何使用子进程执行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()
发布于 2018-08-03 06:48:03
一个简单的选项是使用子进程运行一系列命令,如下所示(请注意,shell=True
是有风险的,只有在可以控制输入的情况下才应该使用)。
import subprocess
cmd = 'source activate my_virtualenv; python my_script.py'
subprocess.call(cmd, shell=True, executable='/bin/bash')
并根据需要重复。
https://stackoverflow.com/questions/8052926
复制相似问题