1. ホーム
  2. python

[解決済み] Pythonで、インポートされたモジュールのmain()を呼び出すことはできますか?

2022-09-20 07:01:30

質問

Pythonで、私は モジュール myModule.py でいくつかの関数と main() で、いくつかのコマンドライン引数を取ります。

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

では、実際にどのように main()を呼び出します。 関数を呼び出すことができます。 をmain()関数から呼び出します。 を使うのですか?そんなことできるの? どのように任意の 引数を渡すには? を渡すのでしょうか?

どのように解決するのですか?

これは単なる関数です。インポートして呼び出してください。

import myModule

myModule.main()

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

  • でパースする。 main() で解析しますが sys.argv をパラメータとして渡します (以下のコードはすべて同じモジュールの myModule ):

    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__ という変数が設定され、それに対してテストすることで、コードがどのように実行されたかを知ることができます。