Марк Лутц - Изучаем Python, Четвертое издание (1184811), страница 25
Текст из файла (страница 25)
Такой способ может оказатьсяболее универсальным, так как он не требует жестко указывать во всехсценариях путь к каталогу, куда был установлен Python.Если у вас имеется доступ к программе env из любого места, ваши сценарии будут запускаться независимо от того, где находится интерпретаторPython, – вам достаточно будет лишь настроить переменную окруженияPATH в своих системах, не внося исправления в первую строку всех сценариев. Безусловно, этот способ предполагает, что во всех системах программа env находится в одном и том же каталоге (в некоторых системахона может располагаться в каталогах /sbin, /bin или где-то еще), в противном случае о переносимости не может быть и речи.Щелчок на ярлыке файлаИспользование реестра в операционной системе Windows позволяет открыватьфайл просто щелчком мыши.
При установке интерпретатор Python автоматически регистрирует себя в качестве программы, используемой для открытияфайлов с программами на языке Python щелчком мыши. Это делает возможным запуск программ на языке Python простым щелчком (или двойным щелчком) мыши на ярлыке файла.В операционных системах, отличных от ����������������������������������Windows���������������������������, наверняка имеется возможность реализовать аналогичный трюк, но сами ярлыки, программа просмотрафайловой системы, система навигации и прочее могут несколько отличаться.В некоторых системах UNIX, например, может потребоваться зарегистрировать расширение .py в программе просмотра файловой системы, сделать свой91Щелчок на ярлыке файласценарий исполняемым файлом, использующим специальный комментарий#!, как обсуждалось в предыдущем разделе, или связать тип MIME файлас приложением или командой редактирования файлов за счет установки программ или с помощью других инструментальных средств.
Если щелчок мышью не дает нужного результата, обращайтесь к документации используемойпрограммы просмотра файловой системы за дополнительной информацией.Щелчок на ярлыке в WindowsЧтобы продемонстрировать эту возможность, мы продолжим использовать сценарий script1.py, созданный выше, но повторим его содержимое, чтобы вам непришлось перелистывать страницы:# Первый сценарий наimport sysprint(sys.platform)print(2 ** 100)x = ‘Spam!’print(x * 8)языке Python# Загружает библиотечный модуль# Возводит число 2 в степень 100# Дублирует строкуКак мы уже видели, этот файл всегда можно запустить из командной строкисистемы:C:\misc> c:\python30\python script1.pywin321267650600228229401496703205376Spam!Spam!Spam!Spam!Spam!Spam!Spam!Spam!Однако эту программу можно также запустить щелчком мыши, вообще ничегоне вводя с клавиатуры.
Можно попробовать отыскать ярлык этого файла, например выбрав пункт Компьютер (Computer) (Мой компьютер (My Computer) – в ����Windows XP) в меню Пуск (Start) и выполнив переход вглубь дерева каталогов надиске C. В этом случае вы получите изображение в проводнике, как показанона рис. 3.1 (этот снимок с экрана был получен в ���������������������������Windows��������������������Vista���������������������������������). Ярлыки файлов с исходными текстами программ на языке Python содержат изображениес текстом на белом фоне, а ярлыки с байт-кодом – изображение с текстом начерном фоне.
Чаще вам придется щелкать (то есть запускать) на файлах с исходными текстами, чтобы увидеть последние изменения. Для запуска файлаздесь нужно просто щелкнуть на ярлыке файла script1.py.Трюк с использованием функции inputК сожалению, запуск файла в �����������������������������������������Windows����������������������������������щелчком на ярлыке может не привести к удовлетворяющему вас результату. В действительности запуск сценария,как в данном примере, вызывает появление окна на очень короткое время, чегоявно недостаточно для обеспечения обратной связи, на которую так надеютсяпрограммисты, использующие язык Python! Это не ошибка, это лишь особенность обслуживания вывода программы в Windows.По умолчанию интерпретатор Python открывает черное окно консоли DOS, которое будет служить местом для ввода и вывода программы.
Если сценарий выводит какое-то сообщение и завершает работу, что и происходит в приведенномпримере, то окно консоли открывается, туда выводится текст сообщения, но позавершении программы окно закрывается и исчезает. Вы сможете увидеть этот92Глава 3. Как пользователь запускает программыРис. 3.1. В Windows файлы с программами на языке Python отображаютсяв проводнике в виде ярлыков и могут быть запущены двойным щелчком мыши(хотя при этом вы можете не увидеть текст, выводимый программой, и сообщения об ошибках)текст, только если вы обладаете мгновенной реакцией или ваш компьютер неотличается высокой скоростью работы.
Это вполне нормальное поведение, носкорее всего это совсем не то, что вы имели в виду.К счастью, этот недостаток легко ликвидируется. Если вам требуется, чтобырезультаты работы сценария оставались на экране после щелчка мышью на ярлыке файла, просто добавьте вызов встроенной функции input в самом концесценария (в Python 2.6 следует использовать функцию raw_input; смотрите примечание ниже).
Например:# Первый сценарий наimport sysprint(sys.platform)print(2 ** 100)x = ‘Spam!’print(x * 8)input()языке Python# Загружает библиотечный модуль# Возводит число 2 в степень 100# Дублирует строку# <== Добавленная строкаВообще, функция input считывает следующую строку с устройства стандартного ввода, ожидая ее, если она еще недоступна. В результате в данном случаесценарий приостанавливается, благодаря чему окно остается на экране, покане будет нажата клавиша Enter, как показано на рис. 3.2.Теперь, когда я продемонстрировал этот трюк, вы должны иметь в виду, чтоприбегать к нему требуется только в операционной системе Windows, и толькоЩелчок на ярлыке файла93Рис. 3.2.
При запуске программы в Windows щелчком мыши на ярлыкеможно увидеть результаты ее работы, если добавить вызов функции input()в самый конец сценария. Но делать это следует, только если это действительно необходимо!если сценарий выводит какие-либо сообщения, и только если сценарий запускается щелчком мыши на ярлыке.
Вызов функции следует добавлять в самый конец файлов верхнего уровня и только при выполнении всех трех перечисленных условий. Во всех остальных случаях нет смысла добавлять этотвызов (разве что вы просто обожаете нажимать клавишу Enter!).1 Несмотря навсю очевидность сказанного, это еще одна ошибка, которую часто допускаютобучающиеся на моих курсах.Прежде чем двинуться дальше, следует отметить, что функция input – этосредство для ввода информации; она дополняет инструкцию print, которая является средством вывода.
Она представляет собой простейший способ чтенияданных, вводимых пользователем, и обладает более широкими возможностями, чем было продемонстрировано в этом примере. Например, функция input:•• Может принимать строку в качестве аргумента, которая будет выводитьсякак подсказка (например, input(‘Press Enter to exit’))•• Возвращает сценарию текстовую строку (например, nextinput = input())•• Поддерживает возможность перенаправления ввода на уровне команднойоболочки системы (например, python spam.py < input.txt), точно так же, какинструкция print поддерживает возможность перенаправления выводаДалее в этой книге мы найдем более интересное применение этой функции: например, в главе 10 эта функция будет использована для организации интерактивного цикла.1Кроме того, существует возможность полностью подавить появление окна консолиDOS при запуске файлов щелчком мыши в Windows.
Программы, имена файлов которых имеют расширение .pyw, отображают только те окна, которые создаются самими сценариями, – окно консоли DOS при запуске таких файлов не открывается.Файлы с расширением .pyw – это обычные файлы .py с исходными текстами, которыев операционной системе Windows обслуживаются специальным образом. Главнымобразом они используются для сценариев Python, которые сами создают окна пользовательского интерфейса, что часто сочетается с организацией вывода в файлы результатов работы и сообщений об ошибках.94Глава 3.
Как пользователь запускает программыПримечание, касающееся различий между версиями: если выпользуетесь версией Python 2.6 или более ранней, используйтефункцию raw_input() вместо функции input(). В ���������������Python��������� 3.0 первая была переименована в последнюю. С технической точки зрения, версия 2.6 также имеет функцию input, но она интерпретирует вводимые строки, как если бы они содержали программный код, и потому она не может использоваться в данном контексте (ввод пустой строки вызывает ошибку). В Python 3.0функция input (и raw_input в ����������������������������������Python���������������������������� 2.6) просто возвращают введенный текст в виде строки, никак не интерпретируя их. Сымитировать поведение функции input из Python 2.6 в Python 3.0можно с помощью конструкции eval(input()).Другие ограничения на запуск щелчком мышиДаже при использовании функции input запуск файлов щелчком мыши имеетнекоторые недостатки.
Вы можете не заметить появление сообщений об ошибках. Если в ходе работы сценария возникает ошибка, текст сообщения о нейвыводится в окно консоли, которое тут же закрывается. Хуже того, даже добавление вызова input не поможет в такой ситуации, потому что работа сценария будет прервана еще до того, как будет выполнен этот вызов. Другимисловами, вам будет сложно определить, что именно пошло не так.Из-за этих ограничений способ запуска программы щелчком мыши на ярлыкелучше использовать уже после того, как сценарий будет полностью отлажен.Старайтесь использовать другие способы запуска программ, особенно в самомначале работы над ними, такие как запуск из командной строки системы и изIDLE (рассматривается ниже в разделе «Пользовательский интерфейс IDLE»).Благодаря этому вы сможете увидеть сообщения об ошибках и обычный вывод от сценария, не прибегая к разного рода хитростям. Когда позднее в этойкниге мы будем рассматривать исключения, вы узнаете, что существует возможность перехватывать и обрабатывать ошибки так, чтобы они не приводили к аварийному завершению программы.
Обратите внимание на приведенноениже обсуждение инструкции try, которая предоставляет альтернативныйспособ предотвратить преждевременное закрытие окна в случае возникновения ошибок.Импортирование и перезагрузка модулейМы уже говорили об «импортировании модулей», но до сих пор я не давал никаких пояснений, что означает этот термин. Подробно о модулях и об архитектуре крупных программ мы будем говорить в пятой части книги, но так какоперация импорта модулей – это еще один из способов запуска программ, мырассмотрим в этом разделе основы модулей, чтобы дать вам начальное представление о них.Проще говоря, каждый файл с исходным текстом на языке Python, имя которого оканчивается расширением .py, является модулем. Другие файлы могутобращаться к программным компонентам, объявляемым модулем, импорти-Импортирование и перезагрузка модулей95руя этот модуль. По сути инструкция import выполняет загрузку другого файлаи обеспечивает доступ к его содержимому.