12

私は通常のモジュールを持っています

if __name__ == '__main__':
    do stuff...

熟語。

別のモジュールからそれをインポートし、だましてそのコードを実行させたいと思います。これを行う方法はありますか?

ここで説明しない理由により、私はインポートされたモジュールのコードを変更する立場にありません。おそらくihooksなどを使用して、インポート時に名前がメインになるようにインポート手順を変更する必要があります。

4

7 に答える 7

16

他の回答で指摘されているように、これは悪い考えであり、別の方法で問題を解決する必要があります。

とにかく、Python のやり方は次のようになります。

import runpy
result = runpy._run_module_as_main("your.module.name"))
于 2015-07-14T00:55:08.450 に答える
8

ありますが、スクリプトをインポートする代わりに実行します。しかし、これは非常にハックなソリューションだと思います。

ただし、理想的なパターンは次のとおりです。

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()
于 2012-06-22T16:51:34.987 に答える
3

そのコードを関数に入れ、インポート先のモジュールからも呼び出します。

def stuff():
    ...

if __name__ == '__main__':
    stuff()

そして、モジュールでそれをインポートしています:

import module
module.stuff()
于 2012-06-22T16:50:45.660 に答える
0

通常、メイン スタンザのコードを直接実行しても意味がありません。実行したい場合はsubprocess、別の Python インタープリターで実行してください。

于 2012-06-22T16:51:44.530 に答える
0

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.

于 2012-06-22T23:28:29.670 に答える
-1

関数に入れます:

def _main():
   do stuff

if __name__ == '__main__':
    main()
于 2012-06-22T16:51:03.080 に答える