我有一个从命令行读取输出的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()
但我不喜欢它。
由于
答案 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