Лутц М. - Изучаем Python (1077325), страница 18
Текст из файла (страница 18)
Безусловно, этот способ предполагает, что во всех системах программа ели находится в одном и том же каталоге (в некоторых системах она может располагаться в каталогах /эЬ(и, /Ь(л или где-то еще), в противном случае о переносимости не может быть и речи. Как уже говорилось при обсуждении командной строки, современные версии т(Г)лг)отиэ позволяют указывать в командной строке лишь имя файла с расширением .ру — этн версии т(Г1пг(очгэ с помощью реестра определяют, что данный файл должен открываться с использованием интерпретатора Ру1Ьоп (например, команда Ьгтал, ру в них эквивалентна команде Рутьоя Ь г1ап.
ру). Такой режим работы командной строки сродни использованию я! в системах ()Ь)1Х. Следует заметить, что некоторые программы для ТАг1пЙотиэ действительно могут использовать и интерпретировать первую строку я', но командная оболочка РОВ в ТАг1вдотяэ полностью игнорирует ее. вз Щелчок на ярлыке файла хотите обеспечить переносимость процедуры запуска между ()1171Х и МР сгозо15 ЪУ1пг)отса, ваша жизнь наверняка станет проще, если вы всегда будете использовать типичный подход к запуску программ из командной строки, а не стиль, используемый для запуска сценариев в 1))к)1Х.
Щелчок на ярлыке файла Использование реестра в операционной системе %71пг)отуз позволяет открывать файл просто щелчком мыши. При установке интерпретатор РуФЬоп автоматически регистрирует себя в качестве программы, используемой для открытия файлов с программами на языке Ру()топ щелчком мыши. Это делает возможным запуск программ на языке Ру(Поп простым щелчком (или двойным щелчком) мыши на ярлыке файла. В операционных системах, отличных от %(71пг(отоз, вы наверняка сможете проделать аналогичный трюк, но сами ярлыки, программа просмотра файловой системы, система навигации и прочее могут несколько отличаться.
В некоторых системах ()г)1Х, например, может потребоваться зарегистрировать расширение .ру в программе просмотра файловой системы, сделать свой сценарий исполняемым файлом, использующим специальный комментарий 8!, как обсуждалось в предыдущем разделе, или связать тип М1МЕ файла с приложением или командой редактирования файлов за счет установки программ или с помощью других инструментальных средств. Если щелчок мышью не дает нужного результата, обращайтесь к документации используемой программы просмотра файловой системы за дополнительной информацией.
Щелчок на ярлыке в ФЛпдочуб Чтобы продемонстрировать зту возможность, предположим, что у вас имеется следующая программа на языке РуФЬоп, которая была сохранена в файле асг(р(4.ру: Ф Комментарий 1мпог1 575 Огтпт еуа.р1аттогм Оыпт 2 ° ° 100 Здесь не так много нового — всего лишь инструкция 1зрогт и две инструкции рыпг (зуз.
01аггого — зто всего лишь строка, идентифицирующая платформу, с которой вы работаете; она определена в модуле с именем зуз, который необходимо импортировать). Эту программу можно запустить нз командной строки системы: 0;'тЕРЗЕтЕхамр1ез> с11рутооп251рутооп зсг1рт4.ру ипп32 1267650600228229401496703205376 Однако зту программу можно также запустить щелчком мыши, вообще ничего не вводя с клавиатуры. Можно попробовать отыскать ярлык етого файла, например, щелкнув на ярлыке Мой компьютер (Иу СогпрШег) 86 Глава 3. Как пользователь запускает программы Следует отметить, что функция газ !прот — это средство для ввода информации, дополняющая инструкцию рг!пт, которая является средством вывода.
Она представляет собой простейший способ чтения вводимых данных, и обладает более широкими возможностями, чем было продемонстрировано в этом примере. Например, функция гав 1прот: ° Может принимать строку в качестве аргумента, которая будет выводиться как подсказка(например, га««!прот('Ргезв Ептег !о вх!!')). ° Возвращает сценарию текстовую строку (например, пехт!про! гав !про!()). ° Поддерживает возможность перенаправления потока ввода на уровне командной оболочки системы (например, пут Поп врал.
ру < 1про!. !х!), точно так же, как инструкция рг1п! поддерживает возможность перенаправления вывода. Далее в этой книге мы найдем более интересное применение этой функции: например, в главе 10 эта функция будет использована для организации интерактивного цикла. Другие ограничения на запуск щелчком мыши Даже при использовании функции гав !про! запуск файлов щелчком мыши имеет некоторые недостатки.
Вы можете не заметить появление сообщений об ошибках. Если в ходе работы сценария возникает ошибка, текст сообщения о ней выводится в окно консоли, которое тут же закрывается. Хуже того, даже добавление вызова гатг !прот не поможет в такой ситуации, потому что работа сценария будет прервана еще до того, как будет выполнен этот вызов. Другими словами, вам будет сложно определить, что именно пошло не так. Из-за этих ограничений способ запуска программы щелчком мыши на ярлыке лучше использовать уже после того, как сценарий будет полностью отлажен.
Старайтесь использовать другие способы запуска программ, особенно в самом начале работы над ними, такие как запуск из командной строки системы и из интегрированной среды разработки 1ПЬЕ (будет рассматриваться ниже, в этой же главе). Благодаря этому вы сможете увидеть сообщения об ошибках и обычный вывод от сценария, нс прибегая к разного рода хитростям. Когда позднее в этой книге мы будем рассматривать исключения, вы узнаете, что существует возможность перехватывать и обрабатывать ошибки так, чтобы они не приводили к аварийному завершению программы.
Обратите внимание на приведенное ниже обсуждение инструкции !гу, которая предоставляет альтернативный способ предотвратить преждевременное закрытие окна в случае возникновения ошибок. Импортирование и перезагрузка модулей Мы уже говорили об «импортировании модулей», но до сих пор я не давал никаких пояснений, что означает этот термин. Подробно о моду- Импортирование и перезагрузка модулей 87 лях и об архитектуре крупных программ мы будем говорить в пятой части книги, но так как операция импорта модулей — это еще один из способов запуска программ, мы рассмотрим в этом разделе основы модулей, чтобы дать вам начальное представление о них.
Проще говоря, каждый файл с исходным текстом на языке Ру1)топ, имя которого оканчивается расширением .ру, является модулем. Другие файлы могут обращаться к программным компонентам, объявляемым модулем, имнорлтируя этот модуль. По сути, инструкция 1вро гт выполняет загрузку другого файла и обеспечивает доступ к его содержимому. Содержимое модуля становится доступным внешнему миру через его атрибуты (определение этого термина я дам в следующем разделе).
Эта модульная модель является центральной идеей, лежащей в основе архитектуры программ на языке Ру1)топ. Крупные программы обычно организованы в виде множества файлов модулей, которые импортируют и используют функциональные возможности из других модулей. Один из модулей определяется как основной файл верхнего уровня, который запускает всю программу. Проблемы модульной архитектуры мы будем рассматривать подробнее позже, в этой же книге, а в этой главе основное внимание уделяется тому факту, что операция импорта приводит к выполнению программного кода загружаемого файла на заключительном этапе, Как следствие, импорт файла является еще одним способом запустить его. Например, если запустить интерактивный сеанс работы с интерпретатором (в 1Р(Е, из командной строки или как-то иначе), можно будет запустить файл асг(р14.ру, созданный ранее, с помощью простой инструкции ппро гт: 0; 'тЕРЗЕт,ЕХааР1ЕЗ> О: '>РУ1ПОП25>РУ1ПОП »> 1арог1 вог1р14 и>032 1267650600228229401496703205376 Такой способ пригоден только для однократного запуска модуля в течение сеанса.
После первой операции импорта все последующие попытки импортировать модуль не приводят ни к каким результатам, даже если изменить и сохранить исходный текст модуля в другом окне: »> 1врогт зог1р14 >» 1йрогт зог1р14 Так сделано преднамеренно — операция импорта требует слишком больших затрат вычислительных ресурсов, чтобы выполнять ее более одного раза в ходе выполнения программы.
Как вы узнаете в главе 18, в ходе импорта производится поиск файлов, компиляция их в байткод и выполнение этого байт-кода. Если действительно возникает необходимость вынудить интерпретатор многократно запускать файл в рамках одного и того же сеанса (без 88 Глава 3. Как пользователь запускает программы остановки и перезапуска сеанса), можно воспользоваться встроенной функцией ге1оаек »> ге1саа(асг1РС4) ьш32 65536 <вссс1е 'астр!4' ггсс 'асг>рс4.ру'> »> Функция ге1оав загружает и запускает текущую версию программного кода в файле, если он был изменен в другом окне. Это позволяет редактировать и использовать новый программный код в ходе одного и того же интерактивного сеанса работы с интерпретатором Рубцов.
В этом сеансе, например, уже после того как модуль был импортирован, вторая инструкция рг!п! в файле асг1рг4ру была изменена в другом окне так, чтобы она выводила результат выражения 2 ** 16, после чего была выполнена перезагрузка модуля с помощью функции ге! оаа. Функция ге1оас ожидает получить имя уже загруженного модуля, поэтому, прежде чем перезагрузка станет возможной, модуль должен быть импортирован. Примечательно также, что имя модуля при вызове функции ге1оао должно быть заключено в круглые скобки, тогда как инструкция !зрогг не требует этого. Дело в том, что ге1оас — это функция, которая вьгзьгвается, а !прог! — это инструкция.
Именно поэтому имя модуля следует передавать функции ге1оао как аргумент, в круглых скобках, и именно поэтому после перезагрузки модуля выводится дополнительная строка. Последняя строка в выводе выше— это всего лишь представление результата, возвращаемого функцией ге1оас после перезагрузки модуля.