2017-09-15 44 views
0

Openstack APIを使用してOpenstackから詳細を取得する機能しかありません。私はすでにロギングを行っていますが、いくつかのネットワークを素早く検証するために、printステートメントの出力をファイルにリダイレクトしています。 (これはこのように見えます)、これは正常に動作します。リダイレクトコマンドライン引数が指定されている場合、statment出力をファイルに出力します。

def get_net_details(): 
    ... 
    filename = open('validation.txt', 'a') 
    network_name = network['name'] 
    print >> filename, 'Network Name : {0}'.format(network_name) 
    network_id = subnet_detail['subnet']['network_id'] 
    print >> filename, 'Network ID : {0}'.format(network_id) 
    network_type = network['provider:network_type'] 
    print >> filename, 'Network Type : {0}'.format(network_type) 
    print >> "=========================================" 
    filename.close() 

問題は、私は、ユーザーがスクリプトの実行時に任意のコマンドライン入力(argparseを経由して任意のスイッチまたはその他の方法)を提供する場合にのみ、ファイルにprint文の出力を記録したい、です。

お手数ですが..! - コマンドラインフラグに依存 - のparamとして

def get_net_details(outstream): 
    ... 
    network_name = network['name'] 
    print >> outstream, 'Network Name : {0}'.format(network_name) 
    network_id = subnet_detail['subnet']['network_id'] 
    print >> outstream, 'Network ID : {0}'.format(network_id) 
    network_type = network['provider:network_type'] 
    print >> outstream, 'Network Type : {0}'.format(network_type) 
    print >> outream, "=========================================" 

その後、呼び出し側が開いたファイルまたはsys.stdoutのいずれかを通過させる:それは、入力としてストリームをとるように

+1

sys.argvの長さを確認し、入力がある場合はリダイレクトを行います。 – Deepaklal

+0

getoptモジュールも試してみてください。コマンドライン引数を扱う標準的な方法があります – Deepaklal

答えて

1

まずあなたの関数を書き換えます。

def main(...): 
    # argparse stuff here 

    if someflag: 
     outstream = open(path/to/file, "w") 
    else: 
     outstream = sys.stdout 
    try: 
     get_net_details(outstream) 
    finally: 
     if someflag: 
      outstream.close() 
関連する問題