2017-01-16 2 views
0

В настоящее время у меня есть код, который проверяет if __name__ == '__main__', а затем вызывает некоторую функцию, если это так. В настоящее время я выполняю этот код, создавая еще один подпроцесс python, но импортировать его в качестве модуля является более чистым. Проблема в том, что в этих модулях нет функции main - это точно то, что выполняется под __name__ == '__main__'. Единственный вариант, который у меня есть, это установить атрибут __name__ перед выполнением модуля. Каков наилучший способ сделать это?Установите __name__ в '__main__' на модуль перед исполнением

+0

Почему вы добавляете 'if __name__ == '__main __'', когда хотите, чтобы он выполнялся при импорте? – MSeifert

+0

Это не мой код. – xaav

+0

Если вы не можете просто выполнить функцию 'main', я рекомендую * not * импортировать этот файл. Просто продолжайте работать так, как вы его запускали. Среди прочего, что произойдет, если вам нужно дважды запустить код? Вы не можете просто повторно импортировать его. Есть много осложнений с попыткой заставить этот код работать как модуль, если вы не можете изменить код. – 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 Внутренности, но делает пропустить некоторые атрибуты.

Смежные вопросы