2017-02-02 2 views
1

ビルドする必要があるコードで発生した問題を回避しようとしています。私はPythonモジュールを持っているので、引数をインポートして渡すことができ、メインモジュールが解析する必要があります。私が与えられていることは次のようになります。if __name__ == '__main__' function call

#main.py 
if __name__ == '__main__' 
    sys.argv[] #pass arguments if given and whatnot 
    Do stuff... 

私は引数を取ることができmain()機能を追加し、それらを解析し、そのようにそれらを渡すためにされて必要なもの:

#main.py with def main() 
def main(args): 
    #parse args 
    return args 

if __name__ == '__main__': 
    sys.argv[] #pass arguments if given and whatnot 
    main(sys.argv) 
    Do stuff... 

要約すると、私はmain.pyをインポートし、main()関数で解析された引数を渡して、返された情報をif __name_ == '__main_'部分に渡す必要があります。

EDIT は私がやっているものを明確にすることも

#hello_main.py 
import main.py 

print(main.main("Hello, main")) 

私はまだこのよう名前を保存

$: python main.py "Hello, main" 

を経由してシェルからmain.pyを呼び出すことができるようにしたい == メイン

私は何を求めていますか?私は、可能な限り、私が与えられたmain.pyモジュールを保存したいので、今日この問題を研究しているところで、より良いところを費やしています。呼び出すとき

# In a file called test.py 
import main 
import sys 

... code 

if __name__ == "__main__": 
    main.main(sys.argv) 
    ... rest of your code 
+1

何を試しましたか?あなたはどんなエラーを出していますか?あなたの貴重な死の一日を、コードを実行することなくこの問題を「研究」していた一日を無駄にしなかったと教えてください。 –

+0

'if __name__ == '__main __':'モジュールは_called_でインポートされていないときにのみ実行されます。 –

+2

sys.argvで渡された引数を使って、 'if __name__ == '__ main __''で 'main'を呼び出すのは間違っていますか? –

答えて

3

モジュールファイル内の特定の動作を取得するためにif __name__ == "__main__"を書くことができます:私はあなたがこのような何かをしたい、正しくあなたの質問を理解している場合

おかげで、

DMG

+0

これは私が探していたものでした。ありがとうございました。 –

0

そのファイルを直接、例えばシェル経由:

#mymodule.py 
import sys 
def func(args): 
    return 2*args 

#This only happens when mymodule.py is called directly: 
if __name__ == "__main__": 
    double_args = func(sys.argv) 
    print("In mymodule:",double_args) 

別のファイルにインポートするときに一つはその後、まだ機能を使用することができます。

#test.py 
import mymodule 
print("In test:",mymodule.func("test ")) 

したがって、python mymodule.py helloを呼び出すと"In mymodule: hello hello "になりながらpython test.pyは、"In test: test test "になります呼び出します。

関連する問題