Пошаговое руководство по работе с Python через командную строку

Раздел: Администрирование и окружение Python -> Основные команды

Основы запуска Python в командной строке Windows

Командная строка cmd предоставляет прямой интерфейс для взаимодействия с интерпретатором Python. Ниже рассмотрены базовые и альтернативные способы использования Python через cmd, а также типичные ошибки и их устранение.

Наиболее универсальный сценарий - запуск готового скрипта с передачей аргументов. Для этого используется модуль sys.argv, который хранит список аргументов командной строки.

Пример скрипта greet.py:

import sys
print(f"Привет, {sys.argv[1]}!")

Python через cmd (работа с python через командную строку)

Команда для запуска из cmd:

python greet.py Мир
Привет, Мир!

Пояснение: sys.argv[0] содержит имя скрипта, sys.argv[1] - первый переданный аргумент. Если аргумент не указан, возникнет ошибка IndexError.

Типичная ошибка: сообщение 'python' не является внутренней или внешней командой. Решение: добавить путь к интерпретатору (например, C:\Python311\) в переменную окружения PATH.

Как войти в интерактивный режим Python?

Команда python без аргументов запускает REPL (Read-Eval-Print Loop), где можно выполнять код построчно.

python
Python 3.11.5 ...
Type "help", "copyright", "credits" or "license" for more information.
>>>

Пример работы в REPL:

>>> 2 + 2
4
>>> print("Hello from REPL")
Hello from REPL

Выход из режима - команда exit() или сочетание клавиш Ctrl+Z затем Enter.

Возможная проблема: если установлено несколько версий Python, команда python может запустить не ту версию. Решение: использовать py -3.11 для явного указания версии с помощью py launcher.

Как выполнить однострочный код без создания файла?

Флаг -c позволяет передать код непосредственно в командной строке.

python -c "import math; print(math.sqrt(16))"
4.0

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

Ошибка: неправильное экранирование кавычек. В cmd внутри строки с двойными кавычками нужно удваивать кавычки или использовать одинарные, если Python запущен на Windows. Лучше заключать команду в двойные кавычки, а внутри использовать одинарные.

Как передать сложные аргументы в скрипт?

Библиотека argparse предоставляет удобный интерфейс для разбора аргументов с флагами и значениями.

Пример скрипта userinfo.py:

import argparse

parser = argparse.ArgumentParser(description="Вывод информации о пользователе")
parser.add_argument("--name", required=True, help="Имя пользователя")
parser.add_argument("--age", type=int, help="Возраст")
args = parser.parse_args()

if args.age:
    print(f"{args.name}, возраст {args.age} лет")
else:
    print(f"Имя: {args.name}")

Запуск с параметрами:

python userinfo.py --name Анна --age 25
Анна, возраст 25 лет

Флаг --help автоматически генерирует справку.

python userinfo.py --help

Распространенная ошибка: указание аргумента без значения после флага, требующего значения, приводит к ошибке argparse.ArgumentError. Решение: всегда передавать значение после флага, например --age 25 (не --age 25 лет - лишние слова).

Как использовать переменные окружения в cmd для Python?

Переменные окружения задаются командой set в cmd и доступны в Python через словарь os.environ.

Пример:

set MY_VAR=Значение

Python-скрипт show_env.py:

import os
print(os.environ.get("MY_VAR", "переменная не задана"))
python show_env.py
Значение

Переменные окружения удобны для хранения конфиденциальных данных (паролей) без их явного указания в коде.

Проблема: переменная, заданная через set, действует только в текущем сеансе cmd. Для постоянной установки используется setx (требует перезапуска cmd).

Как перенаправить вывод Python в файл или передать на вход?

Стандартные операторы перенаправления cmd:

  • > - запись вывода в файл (перезапись)
  • >> - добавление в конец файла
  • | - передача вывода на вход другой программы

Пример записи в файл:

python -c "print('Строка для файла')" > output.txt

Пример передачи вывода через конвейер:

dir | python -c "import sys; print(len(sys.stdin.read().splitlines()))"

Результат - количество строк в выводе команды dir.

Ошибка: при перенаправлении ввода (<) может потребоваться чтение из sys.stdin в цикле, чтобы обработать весь поток.

Как управлять версией Python при наличии нескольких установок?

Использование py launcher (поставляется с установщиком Windows) позволяет выбирать версию:

py -3.9 script.py
py -3.11 -c "print('Python 3.11')"

Также можно задать версию по умолчанию через файл py.ini или переменную PY_PYTHON.

Проблема: launcher может не обнаружить установленную версию, если путь к ней не прописан в реестре. Решение: переустановить Python с опцией Register extensions.

Как создать и активировать виртуальное окружение из cmd?

Виртуальные окружения изолируют зависимости проекта. Создание:

python -m venv myenv

Активация (Windows):

myenv\Scripts\activate

После активации в приглашении cmd появится префикс (myenv). Деактивация - команда deactivate.

Установка пакетов внутри окружения:

pip install requests

Типичная ошибка: при активации возникает сообщение "выполнение сценариев запрещено" из-за политики выполнения PowerShell. Решение: запустить Set-ExecutionPolicy Unrestricted -Scope Process в PowerShell, либо использовать командный файл activate.bat из cmd (не PowerShell).

Расширенные примеры работы с Python через cmd

Пример 1: Скрипт для обработки файла с аргументами argparse и чтением данных

Скрипт file_stats.py подсчитывает количество строк, слов и символов в текстовом файле.

Пример
import argparse

def main():
    parser = argparse.ArgumentParser(description="Статистика текстового файла")
    parser.add_argument("filename", help="Путь к файлу")
    parser.add_argument("--encoding", default="utf-8", help="Кодировка файла (по умолчанию utf-8)")
    args = parser.parse_args()

    try:
        with open(args.filename, "r", encoding=args.encoding) as f:
            content = f.read()
            lines = content.count("\n") + (1 if content and not content.endswith("\n") else 0)
            words = len(content.split())
            chars = len(content)
            print(f"Строк: {lines}")
            print(f"Слов: {words}")
            print(f"Символов: {chars}")
    except FileNotFoundError:
        print(f"Ошибка: файл '{args.filename}' не найден")
    except UnicodeDecodeError:
        print(f"Ошибка: не удалось декодировать файл в кодировке {args.encoding}")

if __name__ == "__main__":
    main()

Команда для запуска:

Пример
python file_stats.py sample.txt --encoding cp1251

Пример вывода для небольшого файла:

Строк: 12
Слов: 98
Символов: 643

Пример 2: Однострочный конвейер с обработкой вывода cmd

Использование -c и конвейера для фильтрации списка файлов, содержащих определённое слово:

Пример
dir /b *.txt | python -c "import sys; files = [f.strip() for f in sys.stdin]; [print(f) for f in files if 'report' in f.lower()]"

Результат - имена текстовых файлов, в названии которых есть слово "report" (без учёта регистра).

report_2024.txt
Monthly_report.txt

Пояснение: команда dir /b *.txt выводит только имена файлов, затем их передаётся в Python, который фильтрует строки.

Пример 3: Виртуальное окружение с установкой зависимостей и запуском скрипта

Создание окружения, установка пакетов из requirements.txt и выполнение скрипта - все в одной последовательности команд:

Пример
python -m venv myenv
myenv\Scripts\activate
pip install -r requirements.txt
python app.py

Пример файла requirements.txt:

Пример
flask
requests>=2.25.1

После выполнения скрипта app.py (например, веб-приложение) окружение можно деактивировать командой deactivate.

Проблема: при повторном запуске команды activate в новом сеансе cmd скрипт активации нужно выполнять заново. Решение: сохранять команду активации в bat-файле или использовать python -m myenv для прямого запуска интерпретатора внутри окружения.

Пример 4: Выполнение внешней команды из Python и захват вывода

Модуль subprocess позволяет запускать команды cmd из Python-скрипта и обрабатывать их результат.

Скрипт run_ping.py:

Пример
import subprocess

def ping(host, count=4):
    try:
        result = subprocess.run(
            ["ping", "-n", str(count), host],
            capture_output=True,
            text=True,
            timeout=10
        )
        if result.returncode == 0:
            print(f"Успешно: {host}")
            print(result.stdout[-200:])
        else:
            print(f"Ошибка пинга {host}")
            print(result.stderr)
    except subprocess.TimeoutExpired:
        print(f"Таймаут при пинге {host}")

if __name__ == "__main__":
    ping("8.8.8.8")

Запуск:

Пример
python run_ping.py

Вывод (сокращён):

Успешно: 8.8.8.8
Ответ от 8.8.8.8: число байт=32 время=12мс TTL=117
...

Пример 5: Использование флагов оптимизации и предупреждений

Флаг -OO включает максимальную оптимизацию (удаляются assert и docstrings). Флаг -W ignore подавляет предупреждения.

Пример скрипта warnings_demo.py:

Пример
import warnings

def old_function():
    warnings.warn("Эта функция устарела", DeprecationWarning)
    return 42

old_function()

Запуск без флагов:

Пример
python warnings_demo.py
warnings_demo.py:5: DeprecationWarning: Эта функция устарела
  warnings.warn("Эта функция устарела", DeprecationWarning)

Запуск с игнорированием предупреждений:

Пример
python -W ignore warnings_demo.py
(пусто, только возврат 42)

Флаг -OO можно комбинировать:

Пример
python -OO -W ignore script.py

Это полезно при подготовке кода к релизу, когда предупреждения не важны, а производительность критична.

Работа с Python через командную строку - comments

En
Python через cmd (python)