Я нахожусь в НЕАКТИВНОМ:
>>> import mymodule
>>> # ???
После импорта модуля с:
if __name__ == '__main__':
doStuff()
Как я на самом деле звоню main
от НЕАКТИВНОГО?
Условие if на __name__ == '__main__'
предназначено для того, чтобы код запускался при непосредственном выполнении вашего модуля, а не запускался при его импорте. На самом деле здесь нет такого понятия "main", как, например, в Java. Поскольку Python интерпретируется, все строки кода считываются и выполняются при импорте/запуске модуля.
Python предоставляет механизм __name__
для того, чтобы вы могли отличить случай импорта от случая, когда вы запускаете свой модуль как сценарий, т.е. python mymodule.py
. В этом втором случае __name__
будет иметь значение '__main__'
Если вам нужен main(), который вы можете запустить, просто напишите:
def main():
do_stuff()
more_stuff()
if __name__ == '__main__':
main()
РЕДАКТИРОВАТЬ: обновлен этот старый ответ, так как execfile
был удален в Python 3.
Используйте execfile (т.е. execfile (file_path)
) вместо использования импорта.
Используйте модуль runpy , как предложено в ответе Карлеса Барробеса .
Обновление:
Цель условия if __name__ == '__main __'
состоит в том, чтобы код внутри блока «if» , а не выполнялся при импорте модуля . Такой код будет запускаться только тогда, когда файл запускается напрямую, например, запустив «python filename » из командной строки или используя execfile (_filename _)
.
По запросу, пример использования execfile. В C: \ my_code.py
:
if __name__ == '__main__':
print "Hello World!"
Затем в интерпретаторе:
>>> execfile("C:\\my_code.py")
Hello world!
Если вы импортируете что-то, то это не main. Вам нужно запустить его из меню или в качестве аргумента при запуске idle.
Я предполагаю, что вы вызываете 'main' то, что у вас есть после if __name__ == '__main__'
. Поэтому, чтобы вызвать его:
>> import mymodule
>> mymodule.doStuff()
Иначе, если у вас действительно есть функция main в вашем модуле, тогда,
>> import mymodule
>> mymodule.main()
Все, что вам нужно сделать, это вызвать саму основную функцию, как сказал Хоакин.
Я просто держу терминал открытым в том месте, где находится файл, и повторно выполняю команду, когда мне это нужно.
Последний метод - использовать IDE, например geany или Idle, открыть ее с помощью (файл> открыть) и нажать F5.
У вас есть:
if __name__ == '__main__':
doStuff()
, который на самом деле создан для предотвращения запуска основной функции, если она импортирована.
Я нашел другой способ запустить модуль по имени в Python 2.6:
>>> import runpy
>>> runpy.run_module('mypack.mymodule')
run_module возвращает словарь со всеми созданными атрибутами
http: // docs .python.org / library / runpy.html? highlight = runpy # runpy.run_module