2016-11-02 46 views
-1

私はPythonで次のコードを持っています。これは、より大きいコードベースの一部です。 これまでは働いていましたが、最近は不平を言っています。NameError:グローバル名 'deployment_mode'が定義されていません

私はこのようなtest.pyを呼び出しています:

python -c "import test; test._register_cassandra_service(True)" 

これは、従来のコードだと、過去にも取り組んできました。

print('jjj') 

が実行されなかったので、deployment_modeが初期化されることはありませんように、それは私には奇妙に見えます。次のように

コードは次のとおりです。

test.py

import os 

def _register_cassandra_service(isReRegister): 
    print('hhhhhhhhhhhhhhhhhhhh') 
    print(deployment_mode) 

def main(): 
    global deployment_mode 
    print('jjj') 
    deployment_mode = os.environ.get('DEPLOY_MODE') 

エラー

[email protected]:/opt/cisco/vms-installer/scripts$ python -c "import test; test._register_cassandra_service(True)" 
hhhhhhhhhhhhhhhhhhhh 
Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
    File "test.py", line 5, in _register_cassandra_service 
    print(deployment_mode) 
NameError: global name 'deployment_mode' is not defined 

任意の助けいただければ幸いです。

+1

'main()'は自動的に実行されません。実行する必要がある場合は、呼び出す必要があります。 – khelwood

+0

@khelwoodどのように以前の働きをしたのか –

+0

@Chris_vr:あなたは 'main()'を明示的に呼び出すか、それを関数に入れませんでしたか? 'main()'は決して自動的に呼び出されません。 –

答えて

1

Pythonには、モジュールのエントリポイントであるmain()関数の概念がありません。 main()のコードを常にで実行する必要がある場合は、その関数を明示的に呼び出すか、コードをグローバル名前空間に移動します。あなたが実行しているとして(Pythonが実行スクリプトファイルは、内部モジュール名'__main__'を与えているよう)あなたのモジュールをスクリプトとして使用されている場合

は、あなただけの実行コードに__name__ == '__main__'テストを使用することができますが、それはここでは適用されません。代わりに-cスクリプト。

コードは、投稿されているので、これまでにもうまくいきませんでした。 python testで直接呼び出したことがある場合は、if __name__ == '__main__':ブロックを探してそこで実行されているコードを確認してください。そのコードimport testでスクリプトをインポートするとが実行されません。

1

を呼び出す前に、deployment_modeの値が設定されるように、最初にmain()に電話する必要があります。

main()に依存するので、にmain()を呼び出すこともできます。

関連する問題