2017-08-08 6 views
0

私は複数の環境で動作するいくつかのPythonコードを持っています。コードは環境変数の存在をチェックし、定義されている環境変数に応じて少し異なるパスをとります。コードは次のとおりです。条件付きで変数を作成する

def _get_sink_to_function(): 
    # Determine which path we send data to, based on env variables 
    # One of the following env variables must be present. 
    funcdict = { 
     'LOG_SINK':  _post_gzip_to_log_sink, 
     'FIREHOSE_SINK': _post_gzip_to_firehose_sink 
    } 
    for v in funcdict.keys(): 
     if os.environ.get(v): 
      return funcdict[v] 
    return None 

main(): 
    sink_to_func = _get_sink_to_function() 
    if not sink_to_func: 
     raise AssertionError('Missing mandatory env variable') 
    ... 
    sink_to_func(gzip_data) 

環境変数は、

したがって、私は環境変数を条件付きで作成したいと思います。

例えば、この(有効)ansibleコードで:

LOG_SYNC: "{% if logger == 'one' %}path-to-the-log{% endif %}" 

LOG_SYNCが常に時々「パス・ツー・ログ」の値と、時には空として、定義されます。 loggerが 'one'と等しくない場合、LOG_SYNCはまったく定義されないようにします。許可されていないようだという、

{% if logger == 'one' %} 
    LOG_SYNC: "path-to-the-log" 
{% endif %} 

しかし:つまり

は、私のような何かをしたいです。

+0

は、[XYの問題]のように思える(https://meta.stackexchange.com/questions/66377/what-is -the-xy-problem)...まともなアドバイスを得るために実際のコンテキストを追加してください。 –

+0

私はコンテキストを追加しました。追加情報が必要な場合はお知らせください。 – Roger

+0

あなたはどのようにして環境を設定しますか?それに応じて、例えば、環境オブジェクトを設定するために 'ternary'フィルタを使うことができます。 –

答えて

-1

コンパイラは、コードを記述した言語を問わず、後でいつでも使用される変数を最初に定義する必要があります。

ので、あなたは値NULLを割り当て、変数を定義する必要があります、それは任意のメモリを占有しません

+0

私が書いているyamlコードは、Pythonコードで使用される環境変数を定義しています。 Pythonコードは、環境変数が存在するかどうかをチェックします。 env変数が存在する場合、Pythonコードは変数を使用しようとします。 envが存在しない場合、Pythonコードは代替パスをとります。だから、私は本当に環境変数がまったく存在しないようにしたい。長さゼロの存在はそれほど望ましいものではない。 – Roger

+0

この質問はコンパイラとは何の共通点もありません... –

+0

Roger、詳細を追加してくれてありがとう、コンスタンチンの答えは当時の質問内容に基づいていました –