Python では、インポートしたモジュールの main() を呼び出すことはできますか? 質問する

Python では、インポートしたモジュールの main() を呼び出すことはできますか? 質問する

PythonではモジュールmyModule.pyではいくつかの関数と主要()これにはいくつかのコマンドライン引数が必要です。

私は通常、このmain()をbashスクリプトから呼び出します。今、私はすべてを小さなパッケージそこで、単純な bash スクリプトを Python スクリプトに変換してパッケージに入れることができるのではないかと考えました。

では、実際にどうすればmain() を呼び出すmyModule.py の関数main()関数からMyFormerBashScript.pyの?そんなことできるの?議論それに?

ベストアンサー1

これは単なる関数です。インポートして呼び出します:

import myModule

myModule.main()

引数を解析する必要がある場合は、次の 2 つのオプションがあります。

  • で解析しますが、パラメータとしてmain()渡します(以下のすべてのコードは同じモジュール内にあります)。sys.argvmyModule

    def main(args):
        # parse arguments using optparse or argparse or what have you
    
    if __name__ == '__main__':
        import sys
        main(sys.argv[1:])
    

    myModule.main(['arg1', 'arg2', 'arg3'])これで、他のモジュールからインポートして呼び出すことができます。

  • main()すでに解析されているパラメータを受け入れます (ここでもモジュール内のすべてのコードmyModule):

    def main(foo, bar, baz='spam'):
        # run with already parsed arguments
    
    if __name__ == '__main__':
        import sys
        # parse sys.argv[1:] using optparse or argparse or what have you
        main(foovalue, barvalue, **dictofoptions)
    

    必要に応じて、他の場所でインポートして呼び出しmyModule.main(foovalue, barvalue, baz='ham')、Python 引数を渡します。

ここでの秘訣は、モジュールがスクリプトとして使用されているかどうかを検出することです。Python ファイルをメイン スクリプトとして実行すると ( python filename.py)、importステートメントは使用されないままなので、Python はそのモジュールを呼び出します"__main__"。ただし、同じfilename.pyコードがモジュールとして扱われると ( import filename)、Python はそれをモジュール名として使用します。どちらの場合も変数__name__が設定されており、それに対してテストすると、コードがどのように実行されたかがわかります。

おすすめ記事