Python IDLE: запустить основной? - PullRequest
5 голосов
/ 29 мая 2010

Я в бездействии:

>>> import mymodule
>>> # ???

После импорта модуля с:

if __name__ == '__main__':
    doStuff()

Как мне на самом деле позвонить main из IDLE?

Ответы [ 7 ]

12 голосов
/ 29 мая 2010

Условие if на __name__ == '__main__' предназначено для запуска кода, когда ваш модуль выполняется напрямую, и не запускается при импорте. На самом деле не существует такого понятия «основной», как, например, на Яве. Как интерпретируется Python, все строки кода читаются и выполняются при импорте / запуске модуля.

Python предоставляет механизм __name__, чтобы вы могли отличить регистр импорта от случая, когда вы запускаете свой модуль как скрипт, т.е. Во втором случае __name__ будет иметь значение '__main__'

Если вы хотите запустить main (), просто напишите:

def main():
   do_stuff()
   more_stuff()

if __name__ == '__main__':
   main()
3 голосов
/ 29 мая 2010

Если вы импортируете что-то, это не главное. Вам нужно запустить его из меню или в качестве аргумента при запуске в режиме ожидания.

1 голос
/ 28 октября 2016

Относительно execfile, упомянутого taleinat.

Python 3.5 устарел execfile, вместо этого предлагается следующий метод.

Удален execfile (). Вместо execfile (fn) используйте exec (open (fn) .read ()).

PS: я не могу прокомментировать решение taleinat из-за отсутствия очков репутации в stackoverflow.

1 голос
/ 18 июня 2010

Я нашел другой способ запустить модуль по имени в Python 2.6:

>>> import runpy
>>> runpy.run_module('mypack.mymodule')

run_module возвращает словарь со всеми созданными атрибутами

http://docs.python.org/library/runpy.html?highlight=runpy#runpy.run_module

1 голос
/ 29 мая 2010

Используйте execfile (имя файла) вместо использования импорта.

Обновление:

Цель условия 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!
1 голос
/ 29 мая 2010

Полагаю, вы называете «основным» то, что имеете после if __name__ == '__main__'. Так назвать это:

>> import mymodule
>> mymodule.doStuff()

В противном случае, если в вашем модуле действительно есть основная функция,

>> import mymodule
>> mymodule.main()
0 голосов
/ 29 мая 2010

Все, что вам нужно сделать, это вызвать саму основную функцию, как сказал Хоакин. Как я это делаю, просто оставляю терминал открытым в том месте, где находится файл, и снова запускаю команду, когда мне это нужно. Последний способ - использовать IDE, например, geany или Idle, открыть его с помощью (file> open) и нажать F5.
:

if __name__ == '__main__':
doStuff()

у вас фактически сделано, чтобы не запускать основную функцию, если она импортирована.

...