Пошаговое руководство по работе с 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
Это полезно при подготовке кода к релизу, когда предупреждения не важны, а производительность критична.