← Весь справочник

python3 в одну строку

python3 -c и -m — веб-сервер, проверка JSON, venv, разбор CSV и JSON прямо в командной строке

python3 есть почти на любом Linux-сервере, поэтому его удобно использовать как «швейцарский нож» прямо из оболочки: посчитать, разобрать CSV с кавычками, переформатировать JSON, поднять веб-сервер на минуту. Для этого не нужно писать файл — хватает -c 'код' или -m модуль.

Синтаксис

python3 [опции] -c 'код' [аргументы…]     # выполнить строку
python3 [опции] -m модуль [аргументы…]    # запустить модуль как программу
python3 [опции] файл.py [аргументы…]      # выполнить файл
python3 - [аргументы…] <<'EOF'            # программа из stdin
…
EOF

Аргументы после кода попадают в sys.argv[1:].

Опции интерпретатора

ОпцияЧто делает
-c 'код'выполнить код из строки
-m модульзапустить модуль (http.server, json.tool, venv…)
-uне буферизовать stdout/stderr — вывод сразу виден в логе и в конвейере
-qне печатать баннер в интерактивном режиме
-iпосле выполнения остаться в интерактивной консоли
-Bне создавать __pycache__
-Iизолированный режим: без переменных PYTHON* и пользовательских пакетов
-Vверсия

Полезные модули для -m

КомандаЧто делает
python3 -m http.server [порт]раздать текущий каталог по HTTP (порт 8000 по умолчанию)
… -b адрес / -d каталогслушать только этот адрес / раздавать другой каталог
python3 -m json.tool [вход [выход]]проверить и отформатировать JSON
… --sort-keys, --indent N, --tab, --compactсортировка ключей, отступ, табы, одна строка без пробелов
… --no-ensure-asciiписать кириллицу как есть, а не \u0440…
… --json-linesвход — JSON Lines (объект на строку)
python3 -m venv каталогсоздать виртуальное окружение
python3 -m pip …менеджер пакетов (если установлен)
python3 -m base64 [-d]кодировать / декодировать base64
python3 -m gzip [-d] файлсжать / распаковать
python3 -m zipfile -l|-e|-cсписок / распаковка / создание zip
python3 -m tarfile -l|-e|-cто же для tar
python3 -m sqlite3 файл.db 'SQL'консоль SQLite без пакета sqlite3
python3 -m uuidслучайный UUID
python3 -m calendar 2026 10календарь
python3 -m timeit 'выражение'замерить скорость выражения
python3 -m py_compile файл.pyпроверить синтаксис файла

Коды выхода

0 — успех; 1 — необработанное исключение (Traceback) или синтаксическая ошибка; любой другой — через sys.exit(N). sys.exit('текст') печатает текст в stderr и возвращает 1.

Примеры

# калькулятор
python3 -c 'print(2**64, 7/3, round(7/3, 2))'

# аргументы из командной строки
python3 -c 'import sys; print(sys.argv[1].upper())' hello

# раздать каталог на localhost:8000, только локально
python3 -m http.server 8000 -b 127.0.0.1 -d /srv/www

# проверить и красиво вывести JSON; ошибка — код 1 и место ошибки
echo '{"b":1,"a":[1,2]}' | python3 -m json.tool --sort-keys
python3 -m json.tool --no-ensure-ascii data.json

# CSV с кавычками и запятыми внутри полей — cut тут сломается
printf 'name,age,city\nAnn,30,"New York, NY"\nBob,25,Paris\n' > people.csv
python3 -c 'import csv,sys; [print(r["city"]) for r in csv.DictReader(sys.stdin)]' < people.csv

# сумма по колонке
python3 -c 'import csv,sys; print(sum(int(r["age"]) for r in csv.DictReader(open(sys.argv[1]))))' people.csv

# CSV → JSON
python3 -c 'import csv,json,sys; print(json.dumps(list(csv.DictReader(sys.stdin)), ensure_ascii=False))' < people.csv

# достать поле из JSON
echo '{"items":[{"n":"a"},{"n":"b"}]}' | python3 -c 'import json,sys; print(*[i["n"] for i in json.load(sys.stdin)["items"]], sep="\n")'

# YAML → JSON (если установлен PyYAML)
python3 -c 'import yaml,json,sys; print(json.dumps(yaml.safe_load(sys.stdin)))' < config.yaml

# HTTP-запрос без curl
python3 -c 'import urllib.request as u; print(u.urlopen("http://127.0.0.1:8000/").status)'

# случайный токен, URL-кодирование, дата из Unix-времени
python3 -c 'import secrets; print(secrets.token_hex(16))'
python3 -c 'import urllib.parse as p; print(p.quote("a b/c"))'
python3 -c 'import datetime as d; print(d.datetime.fromtimestamp(1700000000, d.UTC))'

# многострочная программа без файла
python3 - <<'EOF'
import json
with open("data.json") as f:
    data = json.load(f)
print(len(data))
EOF

Подводные камни

  • Команды python может не быть. В Ubuntu есть только python3; python появляется лишь с пакетом python-is-python3.
  • python3 -m venv в Ubuntu падает без пакета python3-venv (ensurepip is not available), оставив недоделанный каталог. Без пакета работает python3 -m venv --without-pip каталог — окружение будет без pip. В песочнице IzzyLab python3-venv и pip не установлены.
  • http.server по умолчанию слушает все интерфейсы (0.0.0.0) и отдаёт каталог любому, кто достучится. Для локальной проверки добавляй -b 127.0.0.1. Это сервер для отладки, не для продакшена: он не поддерживает Range (докачку) и HTTPS.
  • Буферизация вывода. В файл или в конвейер Python пишет блоками, и строки появляются с задержкой — или не появляются вовсе, если процесс убит. Например, баннер Serving HTTP on … при > log не попадёт в лог. Добавляй -u.
  • json.tool экранирует кириллицу в \uXXXX. Нужен читаемый текст — --no-ensure-ascii; в своём коде — json.dumps(…, ensure_ascii=False).
  • В -c нельзя поставить составной оператор после ;. for …: if …: … в одной строке — SyntaxError. Используй генераторы ([… for … if …]), перевод строки внутри кавычек или heredoc python3 - <<'EOF'.
  • Кавычки. Код бери в одинарные кавычки оболочки, а строки Python внутри — в двойные. Тогда $ и ! не тронет bash.
  • CSV-значения — всегда строки. r["age"] — это "30", для арифметики нужен int() или float().

См. также

jq · yq · curl · base64 · sqlite3 · cut