模拟模式下的Python代码

时间:2013-01-22 18:07:21

标签: python

我有一个从命令行读取输出的python代码:

import subprocess

def get_prg_output():
    p = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    out, err = p.communicate()
    return out

print get_prg_output()

在我的办公室,我想在这种模式下模拟结果:

def get_prg_output():
    return 'ok - program executed'

print get_prg_output()

有没有一种优雅的方法可以在不注释原始功能的情况下执行此操作?

我试过这个:

import subprocess

debug = True

if not debug:
    def get_prg_output():
        p = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        out, err = p.communicate()
        return out
else:
    def get_prg_output():
        return 'ok - program executed'
print get_prg_output()

但我不喜欢它。

由于

3 个答案:

答案 0 :(得分:4)

我做这样的事情:

def _get_prg_output_real():
    p = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    out, err = p.communicate()
    return out

def _get_prg_output_fake():
    return 'ok - program executed'

您可以在此处切换:

get_prg_output = _get_prg_output_fake

get_prg_output = _get_prg_output_real

基于用户输入,命令行参数或配置文件或注释/取消注释单行代码......

答案 1 :(得分:2)

def get_prg_output_fake():
    return 'ok - program executed'

然后,如果要启用此模拟,只需执行

get_prg_output=get_prg_output_fake

答案 2 :(得分:0)

我会使用环境变量(或命令开关)来自己控制它,这样您就不必进行代码更改来测试。

import os
import subprocess

def _get_prg_output_real():
    p = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    out, err = p.communicate()
    return out

def _get_prg_output_fake():
    return 'ok - program executed'

if os.environ.get('DEBUG').lower() == 'true':
    get_prg_output = _get_prg_output_fake
else:
    get_prg_output = get_prg_output_real