2017-01-16 10 views
0

現在、if __name__ == '__main__'をチェックし、その場合は関数を呼び出すコードがあります。現在、私は別のpythonサブプロセスを生成することでこのコードを実行しますが、モジュールとしてインポートすることはよりクリーンです。問題は、これらのモジュールにはmainの機能がないことです。正確には__name__ == '__main__'の下で実行されるものです。私が実際に持っている唯一のオプションは、モジュールを実行する前に__name__属性を設定することです。これを行う最善の方法は何ですか?実行前にモジュール上で__name__を '__main__'に設定する

+0

インポート時に実行するには、 'if __name__ == '__main __''をなぜ追加しますか? – MSeifert

+0

私のコードではありません。 – xaav

+0

単に 'main'関数を作ることができない場合は、このファイルをインポートしないことをお勧めします。ちょうどあなたがそれを実行してきた方法でそれを実行し続けます。とりわけ、コードを2回実行する必要がある場合はどうなりますか?あなたはただそれを再インポートすることはできません。コードを変更できない場合は、このコードをモジュールとして動作させるために多くの複雑さがあります。 – user2357112

答えて

0

私は何をやってしまったことは以下の通りです:

imp_new_module = type(sys) 
new_module = imp_new_module(module_name) 
new_module.__dict__['__name__'] = '__main__' 
exec(open(scriptname).read(), new_module.__dict__) 

これはのimportlibの内部が何に似ていますが、いくつかの属性をスキップありません。

関連する問題