Выполнение Python кода в командной строке (cmd)

Раздел: Администрирование -> Выполнение программ

Запуск Python скриптов через командную строку

Основной и наиболее универсальный способ выполнения скрипта Python в среде Windows cmd - команда python script.py. Для её использования интерпретатор Python должен быть установлен, а путь к нему добавлен в переменную окружения PATH (опция Add Python to PATH при установке). После этого команда python становится доступна из любого каталога.

Пример запуска скрипта из текущей папки:

python my_script.py

Python 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

Результат:

Запуск в отладочном режиме

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

Запуск Python скриптов через cmd - comments

En
Python run cmd (python)