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

ユーザー入力、コマンドライン引数、構成ファイル、またはコードの 1 行のコメント化/コメント解除に基づいて ...

于 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 に答える