私は通常のモジュールを持っています
if __name__ == '__main__':
do stuff...
熟語。
別のモジュールからそれをインポートし、だましてそのコードを実行させたいと思います。これを行う方法はありますか?
ここで説明しない理由により、私はインポートされたモジュールのコードを変更する立場にありません。おそらくihooksなどを使用して、インポート時に名前がメインになるようにインポート手順を変更する必要があります。
私は通常のモジュールを持っています
if __name__ == '__main__':
do stuff...
熟語。
別のモジュールからそれをインポートし、だましてそのコードを実行させたいと思います。これを行う方法はありますか?
ここで説明しない理由により、私はインポートされたモジュールのコードを変更する立場にありません。おそらくihooksなどを使用して、インポート時に名前がメインになるようにインポート手順を変更する必要があります。
他の回答で指摘されているように、これは悪い考えであり、別の方法で問題を解決する必要があります。
とにかく、Python のやり方は次のようになります。
import runpy
result = runpy._run_module_as_main("your.module.name"))
ありますが、スクリプトをインポートする代わりに実行します。しかし、これは非常にハックなソリューションだと思います。
ただし、理想的なパターンは次のとおりです。
def do_stuff():
... stuff happens ...
if __name__ == '__main__':
do_stuff()
そうすれば、次のことができます:
from mymodule import do_stuff
do_stuff()
編集:モジュールコードを編集できないことを明確にした後の回答。
これは、「自己責任で使用する」ソリューションであるため、本番コードでは決してお勧めしません。
import mymodule
with open(os.path.splitext(mymodule.__file__)[0] + ".py") as fh:
exec fh.read()
そのコードを関数に入れ、インポート先のモジュールからも呼び出します。
def stuff():
...
if __name__ == '__main__':
stuff()
そして、モジュールでそれをインポートしています:
import module
module.stuff()
通常、メイン スタンザのコードを直接実行しても意味がありません。実行したい場合はsubprocess
、別の Python インタープリターで実行してください。
Here is an example of a main module in Python:
#! /usr/bin/env python
import sys
import os
def main(arg1, arg2, arg3):
print(arg1, arg2, arg3)
if __name__ == "__main__":
main(*sys.argv)
But you can also include
def main():
#The module contains Python code specific to the library module,
#like tests, and follow the module with this:
if __name__ == "__main__":
main(*sys.argv)
in any module you would like to run as main.
For example, if you have a library module, you can always use this construct to execute something specific like tests.
関数に入れます:
def _main():
do stuff
if __name__ == '__main__':
main()