2

我有一个从命令行读取输出的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()

但我不喜欢它。

谢谢

4

3 回答 3

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

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

于 2013-01-22T18:10:04.683 回答
2
def get_prg_output_fake():
    return 'ok - program executed'

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

get_prg_output=get_prg_output_fake
于 2013-01-22T18:10:04.483 回答
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
于 2013-01-22T18:27:42.030 回答