Как запускать скрипты python в windows
Перейти к содержимому

Как запускать скрипты python в windows

  • автор:

Урок 6. Как запускать Python программы

В прошлом уроке мы запустили свою первую программу на Python, она вывела фразу «Hello, World!». И эту программу мы запустили с помощью PyCharm.

Однако это не единственный способ выполнять Python-скрипты. Рассмотрим еще несколько вариантов.

И первый — это запуск программ из командной строки. Введем в строке поиска введем cmd и кликнем по найденной программе. Появилось черное окно — это командная строка. Мы уже запускали её ранее, когда проверяли установлен ли Python.

И командная строка — это такое место, где вы можете вводить разные команды, а также названия программ и они будут выполнятся. Программистам часто приходится иметь дело с командными строками, терминалами и другими похожими оболочками.

Чтобы в командной строке запустить Python-программу нужно сперва перейти в каталог, где эта программа расположена.

По умолчанию после открытия терминала мы находимся в домашней папке активного Windows-пользователя. И так как все наши проекты хранятся в каталоге PycharmProjects, то нужно ввести:

cd PycharmProjects

cd — это команда для смены текущего каталога. Сокращение от Change dir. Нажмем Enter. И мы в каталоге с проектами. Теперь перейдем непосредственно в наш проект. Снова ведем команду cd после которой укажем имя проекта (sepython):

cd sepyhton

Нажму Enter. Командная строка вывела, что системе не удается найти указанный путь. Если вы видите такую же надпись, то причин может быть две:

Первая — это опечатка в имени файла или каталога. Это самая распространенная ошибка, внимательно проверьте то, что набрали.
Вторая причина может заключаться в том, что в данном каталоге просто нет папки SEPython. Возможно вы создали её в другом месте.

Чтобы проверить какие файлы или каталоги есть в текущей директории, надо набрать команду dir.

Чтобы минимизировать опечатки, можно пойти на небольшую хитрость и не вводить имя каталога вручную, а воспользоваться автоподстановкой командной строки.

Для этого надо снова ввести команду cd, за ней пробел, а после написать se и нажать клавишу Tab. Командная строка сама дополнит имя каталога до правильного. После чего нужно снова нажать Enter и нас сразу переместит в каталог с проектом.

Если мы еще раз выполним комунд dir, то увидим каталоги Lessons и Tasks, а также файл main.py.

Что ж, нам надо запустить нашу программу hello_world.py, а она находится в папке Lessons. Перейдем в неё:

cd Lessons

Теперь надо запустить hello_world.py и для этого надо сперва написать python, а затем через пробел имя программы hello_world.py:

python hello_world.py

Обратите внимание, что я набираю имя программы, ровно так как его записал в прошлом уроке. Все символы строчные, между словами стоит подчеркивание, а не пробел.

Что ж, нажму Enter! Программа вывела фразу «Hello, world! Отлично, у нас всё получилось.

Теперь давайте рассмотрим несколько распространенных ошибок, которые у вас могут возникнуть на данном этапе. Первая — это снова опечатка. Если поменять два последних символа местами и снова попробовать запустить программу, то мы увидим ошибку, что файл hello_world.yp не найден в текущем каталоге. Когда вы видите такую ошибку, то это повод проверить имя файла, а также его реальное присутствие в данной директории.

В целом с hello_world мы закончили, и осовная проблема данной прогарммы в том, что она всегда будет выводить фразу, которую мы задали внутри программы, а это делает код абсолютно бесполезным. Другое дело hello_user.py, которую я добавил самостоятельно (у вас этой программы пока нет).

Сейчас я покажу как она работает, а в следующем уроке покажу и объясню её исходный код. То есть то, что находится внутри скрипта.

Итак давайте введем:

python hello_user.py

Программа вывела что-то непонятное. На самом деле она завершилась с ошибкой. Дело в том, что скрипт hello_user.py нужно запускать с передачей аргументов или другими словами с передачей дополнительных параметров.

Это значит, что нужно писать python hello_user.py плюс еще какой-то текст, например такой:

python hello_user.py Nikita

В этом случае слово Nikita — это аргумент командной строки, который при запуске будет отправлен в программу hello_user.py.

То есть сейчас в строке три элемента: сам python, имя программы hello_user.py и аргумент командной строки Niktia.

Python запустит программу hello_user.py и передаст в неё слово Nikita. Программа в свою очередь примет это слово и что-то с ним сделает. Давайте посмотрим, что именно, нажмем Enter..

Скрипт отработал без ошибок и поздоровался с нами: «Hello Nikita. Отлично.

Если при запуске передать другой параметр, например Nikita заменить Alena, то скрипт поздоровается с Аленой:

python hello_user.py Alena

То есть теперь программа не просто работает, а она уже умеет каким-то элементарным способом обрабатывать входящие данные и выводить различные результаты в зависимости от этих данных.

В этом курсе, при решении задач, вам часто придется писать подобные программы, которые умеют принимать и обрабатывать входящие данные. И как это правильно сделать мы разберем в следующем уроке.

Следующий урок

Урок 7. Запуск программ с одним аргументом

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

Посмотреть

Полный курс с практикой

  • 146 уроков
  • 310 заданий
  • Сертификат
  • Поддержка преподавателя
  • Доступ к курсу навсегда
  • Можно в рассрочку

Способы запуска скриптов Python

При запуске, интерпретатор CPython сканирует командную строку и переменную среду с целью настройки параметров выполнения скрипта.

Схемы командной строки и ее параметров других реализаций могут отличаться. Смотрите альтернативные реализации языка Python для уточнения параметров запуска конкретной реализации.

При вызове Python можно указать любой из следующих параметров:

$ python [-bBdEhiIOqsSuvVWx?] [-c command | -m module-name | script | - ] [args] 

Напишем и сохраним в файл test.py небольшую программку, которую будем запускать разными способами.

#!/usr/bin/env python3 def hello(text): print(f'Функция "text>"') print('Привет Мир') if __name__ == '__main__': hello('hello') 

Самым распространенным вариантом использования, конечно, является простой вызов скрипта:

$ python3 test.py # Привет Мир # Функция "hello" 

Содержание:

  • Перенаправление вывода программы;
  • Запуск скрипта как модуля с параметром -m ;
  • Запуск скрипта в интерактивном режиме с параметром -i ;
  • Использование имени файла скрипта;
  • Запуск скрипта при выполнении импорта;
  • Использование модуля importlib ;
  • Использование модуля runpy ;
  • Использование функции exec() .

Перенаправление вывода программы.

Иногда бывает полезно сохранить вывод скрипта для последующего анализа. Вот как это сделать:

$ python3 test.py > output.txt

Эта операция сохраняет вывод скрипта в файл output.txt , а не в стандартный системный вывод stdout . В результате на экран попадёт только поток ошибок stderr (в случае их появления). Этот процесс широко известен как перенаправление потока и доступен как в Windows, так и в Unix-подобных системах. Если output.txt не существует, он создается автоматически, если файл уже существует, то его содержимое будет заменено новым выводом.

Что-бы накапливать/добавлять вывод последовательных исполнений скрипта в конец файла output.txt , то нужно использовать две угловые скобки >> вместо одной:

$ python3 test.py >> output.txt

Ну и наконец перенаправление в файл только вывода ошибок (в случае их появления). Для этого достаточно перенаправить стандартный поток ошибок, используя команду 2> (2 — это дескриптор стандартного потока ошибок). В результате на экран попадёт только то, что команда отправляет в стандартный вывод:

$ python3 test.py 2> error.txt

Если необходимо перенаправить в файл вывод всего того, что появляется в консоли при выполнения скрипта ( stdout и stderr ), и при этом накапливать вывод в файле, то запуск сценария должен выглядеть следующим образом:

$ python3 test.py >> output.log 2>&1 # или проще $ python3 test.py &>> output.log

Как быть, если нужно сохранить результаты работы сценария Python в отдельный файл, не смешивая данные со сведениями об ошибках? Так как потоки можно перенаправлять независимо друг от друга, то можно добавить в команду запуска сценария перенаправления стандартного потока вывода в один файл, а ошибок в другой файл:

$ python3 test.py > output.txt 2> error.txt # с добавлением результатов сценария # в `output.txt` и перезаписью `error.txt` $ python3 test.py >> output.txt 2> error.txt

Запуск скрипта как модуля с параметром -m .

Python предлагает ряд параметров командной строки, которые можно использовать в соответствии со своими потребностями. Например, если нужно запустить модуль Python, то необходимо использовать команду python -m .

Опция -m ищет в sys.path имя модуля и запускает его содержимое как __main__ :

$ python3 -m test # Привет Мир # Функция "hello" 

Примечание: имя модуля должно быть именем объекта модуля, а не просто строкой.

Запуск скрипта в интерактивном режиме с параметром -i .

Иногда необходимо в ручную протестировать некоторые функции или классы скрипта, и здесь программиста выручает интерактивный режим работы интерпретатора Python. После того как скрипт отработает, интерпретатор Python перейдет в режим командной строки. В этом режиме, например, можно вызвать любую функцию, определенную в скрипте с другими аргументами.

$ python3 -i test.py # Привет Мир # Функция "hello" # здесь можно запустить любую # функцию с другими аргументами >>> hello('печатает слово Привет!') # Функция "печатает слово Привет!" 

Использование имени файла скрипта

В последних версиях Windows можно запускать сценарии Python, просто введя имя файла, содержащего код, в командной строке:

C:\> test.py # Привет Мир # Функция "hello" 

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

В Unix-подобных системах, таких как GNU/Linux, можно добиться такого поведения добавив первую строку с текстом #!/usr/bin/env python3 . Для Python это простой комментарий, а для операционной системы эта строка указывает, какую программу необходимо использовать для запуска файла.

Эта строка начинается с комбинация символов #! , которая обычно называется «хеш-банг» или «шебанг«, и указывает путь к интерпретатору.

Есть два способа указать путь к интерпретатору:

  • абсолютный путь к интерпретатору: #!/usr/bin/python3 .
  • использование команды env операционной системы, которая находит и запускает Python путем поиска в переменной окружения PATH : #!/usr/bin/env python3 .

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

Вот пример того, как это сделать:

# Даем права на выполнение $ chmod +x test.py # Запускаем скрипт, используя его имя файла $ ./test.py # Привет Мир # Функция "hello" 

Обратите внимание, что если скрипт не находится в текущем рабочем каталоге, то необходимо указать путь к файлу скрипта, чтобы он запустился.

Запуска скриптов из интерактивного сеанса.

Также можно запускать сценарии и модули Python из интерактивного сеанса. Этот вариант предлагает множество возможностей.

Запуск скрипта при выполнении импорта.

В момент импорта модуля происходит загрузка его содержимого для последующего доступа и использования. Самое интересное в этом процессе то, что на последнем этапе import запускает код.

Когда модуль содержит только определения классов, функций, переменных и констант, то не будет видно, что код действительно выполнялся, но когда модуль включает в себя вызовы функций, методов или других инструкций, которые генерируют видимые результаты и расположенные вне сценария верхнего уровня ‘__main__’ , тогда станете свидетелем его исполнения.

>>> import test # Привет Мир # вызов функции `hello()` >>> test.hello('запускается как test.hello()') # Функция "запускается как test.hello()" # выполним импорт только функции `hello()` >>> from test import hello >>> hello('запускается как hello()') # Функция "запускается как hello()" 

Необходимо отметить, что код, который выполняется вне сценария верхнего уровня ‘__main__’ — работает только один раз за сеанс. После первого импорта последующие импорты ничего не делают, даже если изменить содержимое модуля. Это связано с тем, что операции импорта являются дорогостоящими и поэтому выполняются только один раз.

Использование модуля importlib .

Стандартная библиотеке Python содержит модуль importlib , который предоставляет функцию importlib.reload() . С помощью этой функции можно заставить интерпретатор повторно импортировать модуль и, следовательно, выполнить код модуля заново.

Обратите внимание, что аргумент importlib.reload() должен быть именем объекта модуля, а не строкой!

# пробуем импортировать еще раз import test # ничего не происходит >>> import importlib >>> importlib.reload(test) # Привет Мир #  

Функция importlib.reload() также будет полезна, если вы отредактировали исходный файл модуля с помощью внешнего редактора и хотите опробовать новую версию, не выходя из интерпретатора Python.

Использование модуля runpy .

Стандартная библиотека включает модуль runpy , которая имеет функцию runpy.run_module() , позволяющая запускать модули без их предварительного импорта. Эта функция возвращает словарь глобальных переменных исполняемого модуля.

>>> import runpy >>> runpy.run_module(mod_name='test') # Привет Мир #  # . вывод сокращен . # 'hello': > 

Запускаемый модуль ищется с использованием стандартного механизма импорта, а затем выполняется в новом пространстве имен модулей. Первым аргументом runpy.run_module() должна быть строка с абсолютным именем выполняемого модуля без расширения .py .

Модуль runpy также предоставляет функцию runpy.run_path() , которая позволит запустить модуль, указав его расположение в файловой системе:

>>> import runpy >>> runpy.run_path(path_name='test.py') # Привет Мир #  # . вывод сокращен . # 'hello': > 

Как и runpy.run_module() , так и runpy.run_path() возвращает глобальный словарь исполняемого модуля.

Аргумент path_name должен быть строкой и может ссылаться на следующее:

  • Расположение исходного файла Python
  • Расположение скомпилированного файла байт-кода
  • Значение допустимой записи в sys.path , содержащей модуль __main__ (файл __main__.py )

Использование функции exec() .

Встроенная функция exec() поддерживает динамическое выполнение кода Python, тем самым предоставляет альтернативный способ запуска скриптов:

exec(open('test.py').read()) # Привет Мир # Функция "hello" 

Здесь функция open() открывает файл test.py , считывает его содержимое и отправляет в функцию exec() , которая, в свою очередь, запускает код.

Приведенный выше пример немного не соответствует действительности. Это просто «ХАК«, который показывает, насколько может быть Python универсальным и гибким.

  • КРАТКИЙ ОБЗОР МАТЕРИАЛА.
  • Режимы интерфейса интерпретатора Python
  • Общие параметры/флаги командной строки Python
  • Переменные среды окружения Python
  • Поддержка Python Linux perf profiler

Как запустить python скрипт при старте Windows?

dimonchik2013

Можно и не абсолютные если питон прописан в PATH, и есть понимание от какого пользователя будет запускаться и какая директория будет текущей.
В любом случае надо убедиться что у пользователя от которого он будет исполнятся есть необходимые права.

Rimush

Илья @Rimush Автор вопроса

Проблема в том что у меня там создается поток с бесконечным циклом.
Так вот после открытия скрип только один раз проходит и закрывается.

Запуск скриптов Python через cmd.exe без полного пути к скрипту

и после этого файл script1.py был выполнен интерпретатором. При этом я не хочу писать полный путь к скрипту. Я настроил системную переменную PATH , так, чтобы в ней лежал путь к каталогу, в котором находится интерпретатор. Скрипт лежит в той же самой папке. И когда я просто запускаю интерактивный режим командой python из любого каталога, все работает хорошо. Но когда я пишу команду, приведенную выше, скрипт не запускается. То есть переменная PATH работает при поиске интерпретатора и не работает при поиске скрипта. Как мне сделать, чтобы я мог без написания полного пути к файлу запускать его?

Отслеживать

3,528 6 6 золотых знаков 12 12 серебряных знаков 31 31 бронзовый знак

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *