Выполнение Python кода в командной строке (cmd)
Запуск Python скриптов через командную строку
Основной и наиболее универсальный способ выполнения скрипта Python в среде Windows cmd - команда python script.py. Для её использования интерпретатор Python должен быть установлен, а путь к нему добавлен в переменную окружения PATH (опция Add Python to PATH при установке). После этого команда python становится доступна из любого каталога.
Пример запуска скрипта из текущей папки:
python my_script.pyPython run cmd (запуск python скриптов через cmd)
Если скрипт находится в другом месте, указывается полный или относительный путь:python C:/projects/my_script.pyзапустить программу через python (запуск программы через python)
Для проверки установленной версии Python используется команда python --version. Если она завершается ошибкой, следует проверить настройки PATH или переустановить Python с включением соответствующей опции.
При работе с несколькими проектами рекомендуется использовать виртуальные окружения. Активация окружения в cmd: myenv\Scripts\activate (путь указывается с обратными слешами). После активации запуск скрипта выполняется так же командой python script.py.
Как передать аргументы в скрипт при запуске?
Аргументы командной строки передаются через пробел после имени скрипта. Внутри скрипта они доступны в списке sys.argv. Пример скрипта args_demo.py:
import sys
if len(sys.argv) > 1:
print('Аргументы:', sys.argv[1:])
else:
print('Аргументы не переданы')
Запуск:
python args_demo.py один два триРезультат: Аргументы: ['один', 'два', 'три']
Для парсинга сложных параметров (ключи, флаги, типы) используется модуль argparse. Пример будет показан в расширенных примерах.
Типичная ошибка: IndexError при обращении к sys.argv[1] без проверки длины списка. Решение - проверять len(sys.argv) перед доступом.
Пробелы в аргументах: значение с пробелами заключается в двойные кавычки командной строки. Например: python script.py 'значение с пробелами' (в cmd одинарные кавычки не работают, нужны двойные). Для переносимости лучше использовать двойные кавычки.
Как запустить скрипт в изолированном виртуальном окружении без активации?
Если активация окружения нежелательна, можно напрямую использовать интерпретатор из папки окружения. Путь к нему: myenv\Scripts\python.exe. Команда запуска:
myenv\Scripts\python script.py
Это полезно в автоматизированных сценариях (батниках, планировщике задач), где не требуется изменять текущее окружение командной строки.
Ошибка: Fatal error in launcher: Unable to create process using ... - возникает при перемещении или удалении папки окружения. Решение - создать окружение заново командой python -m venv myenv.
Как запустить скрипт с определённой версией Python, если установлено несколько?
В Windows для выбора версии используется лаунчер py. Команда py -3.9 script.py запускает скрипт интерпретатором Python 3.9, если он установлен. Список доступных версий выводится командой py --list.
Пример:
py -3.11 my_script.py
Если лаунчер не установлен, можно указывать полный путь к конкретному интерпретатору: C:\Python311\python.exe script.py.
Ошибка: Requested Python version (3.9) not installed - если указанная версия отсутствует. Решение - проверить установленные версии через py --list.
Как запустить скрипт без появления консольного окна (фоновый режим)?
Для скриптов, не требующих взаимодействия с консолью (например, GUI-приложения или службы), используется интерпретатор pythonw.exe. Команда:
pythonw script.py
Окно cmd не появляется, вывод (print) не отображается. Для отладки таких скриптов вывод перенаправляется в файл.
Проблема: скрипт завершается сразу после запуска, если возникает необработанная ошибка. Решение - оборачивать код в try-except и записывать ошибки в лог-файл.
Как упростить запуск часто используемого скрипта (батник)?
Создание файла с расширением .bat, содержащего команду запуска, позволяет избежать повторного ввода. Содержимое файла run.bat:
@echo off
python C:/projects/my_script.py %*
pause
Переменная %* передаёт все аргументы из командной строки батника в скрипт. Команда pause удерживает окно открытым после завершения скрипта. Батник можно поместить в папку из PATH или создать ярлык.
Ошибка: если скрипт использует пути с пробелами, их нужно заключать в кавычки внутри батника: python "C:/my project/script.py".
Как запустить один Python скрипт из другого (субпроцесс)?
Для программного запуска другого скрипта используется модуль subprocess. Пример:
import subprocess
result = subprocess.run(['python', 'other_script.py', 'arg1'], capture_output=True, text=True)
print(result.stdout)
Этот способ подходит для организации конвейеров, параллельного выполнения или автоматизации тестирования. Аргументы передаются списком, вывод захватывается и обрабатывается.
Проблема: если скрипт не найден, subprocess вернёт ошибку FileNotFoundError. Решение - указывать полный путь или проверять наличие файла перед запуском.
На Windows иногда требуется передавать shell=True для корректного поиска исполняемого файла, но это снижает безопасность.
Общие типичные проблемы и их решения
- 'python' не является внутренней или внешней командой - Python не добавлен в PATH. Решение: переустановить Python с опцией добавления в PATH, или вручную добавить путь к
python.exeв переменную окружения PATH. - SyntaxError из-за версии Python - скрипт написан для Python 3, а запущен интерпретатором Python 2. Решение: использовать
py -3или указать полный путь к нужной версии. - UnicodeEncodeError при выводе кириллицы - кодировка консоли по умолчанию (cp866) не соответствует UTF-8. Решение: изменить кодировку через
chcp 65001перед запуском, или в скрипте установитьsys.stdout.reconfigure(encoding='utf-8'). - ModuleNotFoundError - отсутствует установленный модуль. Решение: установить модуль через
pip install module_name, предварительно активировав нужное окружение.
Расширенные примеры запуска Python скриптов через cmd
Пример 1: скрипт с argparse для обработки параметров командной строки
Скрипт greet.py принимает имя и возраст, выводит приветствие:
import argparse
parser = argparse.ArgumentParser(description='Приветствие пользователя')
parser.add_argument('--name', required=True, help='Имя пользователя')
parser.add_argument('--age', type=int, default=0, help='Возраст')
args = parser.parse_args()
print(f'Привет, {args.name}!')
if args.age:
print(f'Тебе {args.age} лет.')
Запуск:
python greet.py --name Анна --age 25
Результат: Привет, Анна! Тебе 25 лет.
Если обязательный параметр --name пропущен, argparse выведет сообщение об ошибке и завершит программу. Это удобно для создания интерфейсов командной строки.
Пример 2: скрипт с логированием в файл и временной меткой
Скрипт logger.py записывает дату и сообщение в файл log.txt:
import sys
from datetime import datetime
def log_message(msg):
with open('log.txt', 'a', encoding='utf-8') as f:
f.write(f'{datetime.now().isoformat()} - {msg}\n')
if len(sys.argv) > 1:
log_message(' '.join(sys.argv[1:]))
print('Сообщение записано в log.txt')
else:
log_message('Запуск без аргументов')
print('Сработало логирование по умолчанию')
Запуск:
python logger.py Первое сообщение
Результат в файле log.txt:
2024-12-15T10:30:00.123456 - Первое сообщение
Скрипт может использоваться для фиксации событий в фоновых задачах.
Пример 3: запуск дочернего скрипта с обработкой его вывода
Родительский скрипт parent.py запускает дочерний child.py и обрабатывает его stdout:
import subprocess
child_script = 'child.py'
result = subprocess.run(['python', child_script, '--value', '42'],
capture_output=True, text=True, check=True)
print('Вывод дочернего скрипта:')
print(result.stdout)
if result.returncode == 0:
print('Завершение успешно')
else:
print(f'Ошибка: {result.stderr}')
Дочерний скрипт child.py:
import sys, argparse
parser = argparse.ArgumentParser()
parser.add_argument('--value', type=int)
args = parser.parse_args()
print(f'Получено значение: {args.value}')
sys.exit(0)
Запуск родителя:
python parent.py
Результат: Вывод дочернего скрипта: Получено значение: 42 Завершение успешно
Параметр check=True вызывает исключение, если дочерний процесс завершился с ошибкой. Это удобно для конвейеров обработки данных.
Пример 4: использование переменных окружения для настройки поведения
Скрипт env_demo.py читает переменную MODE и в зависимости от её значения выбирает режим работы:
import os
mode = os.environ.get('MODE', 'production')
if mode == 'debug':
print('Запуск в отладочном режиме')
# дополнительная диагностика
else:
print('Обычный режим работы')
# остальной код
Запуск из cmd с установкой переменной:
set MODE=debug && python env_demo.py
Результат:
Запуск в отладочном режиме
Если переменная не установлена, используется значение по умолчанию. Переменные окружения позволяют гибко менять конфигурацию без изменения кода.