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. В песочнице IzzyLabpython3-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 …]), перевод строки внутри кавычек или heredocpython3 - <<'EOF'. - Кавычки. Код бери в одинарные кавычки оболочки, а строки Python внутри — в двойные. Тогда
$и!не тронет bash. - CSV-значения — всегда строки.
r["age"]— это"30", для арифметики нуженint()илиfloat().