Марк Лутц - Изучаем Python, Четвертое издание (1184811), страница 24
Текст из файла (страница 24)
Тем не менее ниже описываются несколько ловушек, в которые часто попадают начинающие:•• Остерегайтесь автоматического присвоения расширения файлам в операционной системе Windows. Если для создания файлов программ в Windowsвы пользуетесь редактором «Блокнот» («��������������������������������Notepad�������������������������»), перед сохранением выбирайте тип файла Все файлы (All Files) и явно указывайте расширение .py.В противном случае «Блокнот» («���������������������������������������Notepad��������������������������������») будет присваивать файлам расширение .txt (например, script1.py.txt), что в некоторых ситуациях осложнит запуск таких файлов.Хуже того, по умолчанию операционная система �����������������������Windows����������������скрывает расширения файлов, поэтому, если вы забыли указать тип файла, вы можете дажене заметить, что создали обычный текстовый файл, а не файл, который88Глава 3.
Как пользователь запускает программыдолжен запускаться интерпретатором Python. Здесь вам может послужитьподсказкой ярлык файла – если на нем отсутствует изображение головызмеи, у вас могут появиться некоторые проблемы с запуском. Отсутствиеподсветки синтаксиса в IDLE и открытие файла в редакторе вместо его запуска в результате щелчка мышью могут служить еще одним признакомэтой проблемы.Текстовый процессор ����������Microsoft� �������������������������������������Word���������������������������������похожим образом по умолчанию добавляет расширение .doc. Мало этого, он добавляет в файл символы форматирования, которые являются недопустимыми с точки зрения синтаксисаPython.
Поэтому возьмите за правило всегда выбирать тип файла Все файлы(All Files) при сохранении в операционной системе Windows или используйтеболее удобные для программистов текстовые редакторы, такие как IDLE.IDLE�����������������������������������������������������������������не добавляет расширение к имени файла автоматически, даже расширение .py – эта особенность нравится программистам, но не пользователям.•• Указывайте расширение имени файла и полный путь в командной строке,но не в инструкциях импорта.
Не забывайте указывать полное имя файлав командной строке, то есть используйте, например, команду python script1.py, а не python script1. Инструкция import, с которой мы познакомимсяниже, в этой же главе, требует, чтобы путь к файлу и его расширение былиопущены (например, import script1). Это несложно, но данная особенностьчасто является источником ошибок.Интерпретацией команды в командной строке занимается система, а неинтерпретатор Python, и в ней неприменимы правила поиска файлов, которые использует Python. Поэтому в командной строке необходимо всегдауказывать расширение файла .py и при необходимости – путь к файлу.
Например, чтобы запустить файл, находящийся в каталоге, отличном от того,в котором вы работаете, обычно необходимо указать полный путь к файлу(например, python d:\tests\spam.py). Однако в программном коде на языкеPython достаточно просто указать инструкцию import spam и доверить интерпретатору самому отыскать требуемый файл в пути поиска модулей, какбудет описано ниже.•• Используйте в файлах инструкции print.
Да, мы уже говорили об этом, ноэто настолько распространенная ошибка, что она вполне заслуживает, чтобы еще раз напомнить о ней. В отличие от интерактивного режима, чтобывывести результаты работы файлов программ на экран, вы должны использовать инструкции print. Если в процессе работы сценарий ничего не выводит, проверьте еще раз – добавили ли вы инструкции print. Повторюсь ещераз, в интерактивном режиме инструкции print можно не использовать, таккак интерпретатор автоматически выводит результаты вычисления выражений – инструкции print не будут здесь помехой, просто мы их не используем, чтобы избавиться от лишнего ввода с клавиатуры.Исполняемые сценарии в UNIX (#!)Если вы используете Python в UNIX, Linux или в другой UNIX-подобной операционной системе, вы можете превратить файлы с программным кодом на языке Python в исполняемые программы, точно так же, как программы на языкахкомандной оболочки, таких как ksh или csh.
Такие файлы обычно называютсяисполняемыми сценариями. Проще говоря, исполняемые сценарии в UNIX-89Системная командная строка и файлыподобных системах – это обычные текстовые файлы, содержащие инструкциина языке Python, но обладающие двумя необходимыми свойствами:•• Первая строка имеет специальный формат. Первая строка в сценариях,как правило, начинается с символов #! (эта комбинация часто называетсякак «hash bang»), за которыми следует путь к интерпретатору Python.•• Как правило, для файлов сценариев установлено разрешение на выполнение.
Обычно файлы сценариев помечаются как исполняемые файлы, чтобысообщить системе, что они могут быть запущены как самостоятельные программы. В UNIX-подобных системах это обычно делается с помощью такойкоманды, как chmod +x file.py.Давайте рассмотрим пример для UNIX-подобных систем. Сначала с помощьютекстового редактора создайте файл модуля Python с именем brian:#!/usr/local/bin/pythonPrint(‚The Bright Side ‚ + ‚of Life...‘)# + означает конкатенацию строкПервая строка в файле сообщает системе, где находится интерпретатор Python.С технической точки зрения, для интерпретатора Python первая строка является комментарием.
Как уже говорилось ранее, все, что начинается с символа #и до конца строки, является комментарием – в них размещается дополнительная информация, предназначенная для человека, который будет читать вашпрограммный код. Но когда в файле присутствует комментарий, такой какв первой строке, он приобретает особый смысл, потому что система использует его для поиска интерпретатора, который будет выполнять остальной программный код в файле.Кроме того, обратите внимание, что этот файл называется просто brian, в егоимени отсутствует расширение .py, которое мы использовали ранее для обозначения модулей.
Наличие расширения .py не повредило бы (и даже лишний разнапоминало бы, что это файл программы на языке Python), но так как этотфайл не планируется импортировать из других модулей, такое имя файла является вполне допустимым. Если дать этому файлу право на выполнение с помощью команды chmod +x brian, вы сможете запускать его из командной строкисистемы, как если бы это была самая обычная программа:% brianThe Bright Side of Life...Для пользователей Windows�����������������������������������������������������������������������������������������������������замечу, что метод, описываемый здесь, характерен для UNIX и неприменим на вашей платформе.
Однако вам незачем волноваться, просто используйте метод запуска, который описывался выше. Укажите имя выполняемого файла, как первый аргумент команды python.11Как уже говорилось при обсуждении командной строки, современные версии Windows позволяют указывать в командной строке лишь имя файла с расширением.py – эти версии Windows с помощью реестра определяют, что данный файл долженоткрываться с использованием интерпретатора Python (например, команда brian.pyв них эквивалентна команде python brian.py). Такой режим работы командной строкисродни использованию #! в системах UNIX. Следует заметить, что некоторые программы для Windows действительно могут использовать и интерпретировать первуюстроку #!, но командная оболочка DOS в Windows полностью игнорирует ее.90Глава 3.
Как пользователь запускает программыC:\misc> python brianThe Bright Side of Life...В этом случае не требуется добавлять специальный комментарий #! в началофайла (хотя, если он присутствует, Python просто игнорирует его) и файл недолжен иметь право на выполнение. Фактически если вы хотите обеспечитьпереносимость процедуры запуска между UNIX и Microsoft Windows, вашажизнь наверняка станет проще, если вы всегда будете использовать типичныйподход к запуску программ из командной строки, а не стиль, используемыйдля запуска сценариев в UNIX.Трюк с использованием команды env в UNIXВ некоторых версиях системы UNIX можно избежать явного указанияпути к интерпретатору Python, если специальный комментарий в первой строке оформить, как показано ниже:#!/usr/bin/env python...здесь находится программный код сценария...При таком подходе программа env отыщет интерпретатор Python в соответствии с настройками пути поиска (то есть в большинстве командных оболочек UNIX поиск будет произведен во всех каталогах, перечисленных в переменной окружения PATH).