Вспомните: сортировщик «Загрузок» из главы 1 и итоги расходов из урока 2.1 знают, с какой папкой и каким файлом работать, только потому что путь записан прямо в коде. Захотели разобрать другую папку или посчитать другой месяц — открываете .py и правите строку. В этом уроке программа начнёт принимать параметры при запуске, как настоящие утилиты: python sort.py Downloads --dry-run.
🎯 После урока сможете: прочитать, что передали программе при запуске, через sys.argv; описать параметры через argparse — обязательные (позиционные) и необязательные --флаги, с типом, значением по умолчанию и подсказкой; показать справку -h; завершить программу с кодом выхода и проверить его в терминале.
sys.argv: что передали программе при запуске
Всё, что вы пишете в терминале после python, попадает в программу списком строк sys.argv (от англ. argument values — значения аргументов). Модуль sys встроен в Python, его нужно только импортировать. Нулевой элемент — имя самой программы, дальше — слова командной строки по порядку. Слова разделяются пробелами.
import sys
print(sys.argv)
print("Аргументов после имени программы:", len(sys.argv) - 1)
Запуск в терминале из папки с программой и вывод:
> python sort.py Downloads --dry-run
['sort.py', 'Downloads', '--dry-run']
Аргументов после имени программы: 2
Если в имени папки есть пробел, возьмите его в кавычки: python sort.py "Мои загрузки". Терминал снимет кавычки и передаст одно слово Мои загрузки. Без кавычек получится два аргумента: Мои и загрузки.
![Сверху строка терминала: python sort.py Downloads --dry-run. Слово python подписано «запускает интерпретатор, в список не попадает». Под остальными тремя словами — три ячейки списка sys.argv с номерами: [0] 'sort.py', [1] 'Downloads', [2] '--dry-run'. От каждого слова стрелка вниз в свою ячейку. Под ячейкой [0] подпись «имя программы», под [1] и [2] — «аргументы, всегда строки».](https://victor-komlev.ru/wp-content/uploads/2026/10/g3-argparse-argv.png)
Все элементы sys.argv — строки, даже если вы ввели цифры. Число из аргумента получают через int() или float(), как с input(). Разбирать аргументы вручную можно и дальше: проверить длину списка и найти флаг оператором in. Если аргументов не хватает, программа сообщает об этом и завершается через sys.exit(1) — что значит число 1, разберём в конце урока.
import sys
if len(sys.argv) < 2:
print("Укажите папку: python sort.py ПАПКА [--dry-run]")
sys.exit(1)
folder = sys.argv[1]
dry_run = "--dry-run" in sys.argv
print("Папка:", folder)
print("Пробный прогон:", dry_run)
> python sort.py Downloads --dry-run
Папка: Downloads
Пробный прогон: True
> python sort.py
Укажите папку: python sort.py ПАПКА [--dry-run]
Для одного-двух аргументов этого хватает. Но когда параметров пять, часть из них необязательна, одни — числа, другие — флаги, ручной разбор разрастается в десятки строк проверок. Для этого есть argparse.
Проверьте себя
Задание. Что выведет print(sys.argv[1]), если запустить программу командой из последней строки кода? Введите значение без кавычек.
Исходный код для этого задания:
import sys print(sys.argv) print("Аргументов после имени программы:", len(sys.argv) - 1) # запуск в терминале: # python sort.py Pictures --dry-runПодсказка: Вспомните, какой элемент списка занимает имя программы, и отсчитайте от него.
✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.
Онлайн-проверка ответа появится позже
Задание. Что выведет программа при таком запуске? Введите число.
Исходный код для этого задания:
import sys print(len(sys.argv)) # запуск в терминале: # python itogi.py rashody.csv --month 2026-09Подсказка: Выпишите слова команды после python и посчитайте, какие из них попадут в список.
✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.
Онлайн-проверка ответа появится позже
Контрольный вопрос. Папка называется «Мои загрузки». Человек запустил сортировщик командой ниже, без кавычек. Что программа напечатает?
Исходный код для этого задания:
import sys print(sys.argv[1]) # запуск в терминале: # python sort.py Мои загрузкиПодсказка: Чем терминал разделяет аргументы и что меняют кавычки?
Онлайн-проверка ответа появится позже
Задание. Программа должна сложить две суммы из командной строки. Что она выведет на самом деле? Введите вывод целиком.
Исходный код для этого задания:
import sys print(sys.argv[1] + sys.argv[2]) # запуск в терминале: # python summa.py 500 250Подсказка: Какого типа элементы sys.argv? Что делает + с такими значениями?
✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.
Онлайн-проверка ответа появится позже
argparse: позиционный аргумент и флаг
Модуль argparse тоже встроен в Python. Работа с ним в три шага:
parser = argparse.ArgumentParser(description="…")— создаём разборщик;description— одна фраза о программе для справки.parser.add_argument(…)— описываем по одному каждый параметр.args = parser.parse_args()— разборщик читаетsys.argv, проверяет его и возвращает объектargs: значение каждого параметра лежит в нём под своим именем,args.folder.
Параметры бывают двух видов. Позиционный — имя без дефисов, например "folder": обязательный, его значение берётся по месту в команде. Необязательный — имя с двумя дефисами, например "--dry-run": его можно не писать. action="store_true" превращает параметр во флаг без значения: написали --dry-run — будет True, не написали — False. Дефис в имени флага в объекте args заменяется на подчёркивание: args.dry_run, потому что имя переменной с дефисом Python не примет. help — подсказка к параметру, она появится в справке.
import argparse
parser = argparse.ArgumentParser(description="Раскладывает файлы папки по подпапкам.")
parser.add_argument("folder", help="папка, которую разбираем")
parser.add_argument("--dry-run", action="store_true", help="только показать, что куда переедет")
args = parser.parse_args()
print("Папка:", args.folder)
print("Пробный прогон:", args.dry_run)
> python sort.py Downloads --dry-run
Папка: Downloads
Пробный прогон: True
> python sort.py Downloads
Папка: Downloads
Пробный прогон: False
Чтобы проверить разбор без терминала, передайте в parse_args список слов сами: parser.parse_args(["Downloads", "--dry-run"]) разберёт их так же, как команду python sort.py Downloads --dry-run. Так удобно пробовать параметры прямо в редакторе, и так устроены задания ниже.
Проверьте себя
Контрольный вопрос. Какую строку добавить в сортировщик, чтобы флаг —verbose (подробный вывод) можно было написать без значения и получить True?
Подсказка: Нужно два признака: параметр необязательный (как это видно по имени) и превращается в True только от своего присутствия.
Онлайн-проверка ответа появится позже
Задание. Допишите пропуск: программа должна напечатать значение флага —skip-hidden. Введите имя атрибута, которое стоит на месте ____.
Исходный код для этого задания:
import argparse parser = argparse.ArgumentParser() parser.add_argument("folder") parser.add_argument("--skip-hidden", action="store_true") args = parser.parse_args(["Downloads", "--skip-hidden"]) print(args.____)Подсказка: Как argparse переделывает дефисы в имени флага, чтобы получилось допустимое имя переменной?
✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.
Онлайн-проверка ответа появится позже
Задание. Что выведет программа? Введите строку вывода целиком, как её печатает print.
Исходный код для этого задания:
import argparse parser = argparse.ArgumentParser() parser.add_argument("folder") parser.add_argument("--dry-run", action="store_true") args = parser.parse_args(["Фото"]) print(args.folder, args.dry_run)Подсказка: Какое значение получает флаг store_true, если его нет в списке слов?
✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.
Онлайн-проверка ответа появится позже
type, default и справка -h
Итогам расходов нужны параметры посложнее: файл (обязательный), месяц, порог суммы и сколько крупных статей показать. Два новых аргумента add_argument:
type=intилиtype=float— argparse сам превратит строку в число. Безtypeзначение остаётся строкой, как вsys.argv.default=…— значение, если параметр не написали. Безdefaultнеобязательный параметр получаетNone.
После --month и --top в команде идёт значение через пробел: --top 5.
import argparse
parser = argparse.ArgumentParser(description="Итоги расходов из CSV-файла.")
parser.add_argument("file", help="CSV-файл: дата;статья;сумма")
parser.add_argument("--month", help="месяц в виде ГГГГ-ММ, например 2026-09")
parser.add_argument("--min", type=float, default=0, help="не считать траты меньше этой суммы")
parser.add_argument("--top", type=int, default=3, help="сколько крупных статей показать")
args = parser.parse_args()
print(args.file, args.month, args.min, args.top)
> python itogi.py rashody.csv --month 2026-09 --top 5
rashody.csv 2026-09 0 5
> python itogi.py rashody.csv
rashody.csv None 0 3
Во втором запуске --month не указан, и там None; --min и --top взяли значения из default.
Справку argparse собирает сам из description и help. Её показывает флаг -h (или --help), писать его в add_argument не нужно:
> python itogi.py -h
usage: itogi.py [-h] [--month MONTH] [--min MIN] [--top TOP] file
Итоги расходов из CSV-файла.
positional arguments:
file CSV-файл: дата;статья;сумма
options:
-h, --help show this help message and exit
--month MONTH месяц в виде ГГГГ-ММ, например 2026-09
--min MIN не считать траты меньше этой суммы
--top TOP сколько крупных статей показать
Строка usage — краткая форма команды: в квадратных скобках — необязательное, MONTH и TOP показывают, что после флага ждут значение. Служебные слова справки — по-английски, ваши подсказки — как вы их написали. В Python до 3.10 раздел options называется optional arguments, а в 3.14 справка в терминале цветная.
![Окно терминала с командой python itogi.py -h и справкой. Строка usage: itogi.py [-h] [--month MONTH] [--min MIN] [--top TOP] file. Ниже описание «Итоги расходов из CSV-файла.», раздел positional arguments с file и подсказкой «CSV-файл: дата;статья;сумма», раздел options с -h, --month MONTH, --min MIN, --top TOP и их подсказками. Выноски сбоку связывают строки справки с кодом: description=… → строка описания, help=… → текст справа от параметра, квадратные скобки → «необязательный».](https://victor-komlev.ru/wp-content/uploads/2026/10/g3-argparse-help.png)
Проверьте себя
Задание. Что выведет программа? Введите число.
Исходный код для этого задания:
import argparse parser = argparse.ArgumentParser() parser.add_argument("file") parser.add_argument("--top", type=int, default=3) args = parser.parse_args(["rashody.csv"]) print(args.top * 10)Подсказка: Есть ли —top в списке слов? Если нет, откуда argparse возьмёт значение?
✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.
Онлайн-проверка ответа появится позже
Задание. Что выведет программа? Введите число, как его напечатает print.
Исходный код для этого задания:
import argparse parser = argparse.ArgumentParser() parser.add_argument("file") parser.add_argument("--min", type=float, default=0) args = parser.parse_args(["rashody.csv", "--min", "150"]) print(args.min * 2)Подсказка: Во что превратит строку «150» параметр type=float? Как print показывает такие числа?
✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.
Онлайн-проверка ответа появится позже
Задание. Автор забыл одну вещь в описании —top. Что выведет программа? Введите вывод целиком.
Исходный код для этого задания:
import argparse parser = argparse.ArgumentParser() parser.add_argument("file") parser.add_argument("--top", default=3) args = parser.parse_args(["rashody.csv", "--top", "4"]) print(args.top * 2)Подсказка: Есть ли у —top параметр type? Каким типом тогда остаётся значение из списка слов и что с ним делает * 2?
✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.
Онлайн-проверка ответа появится позже
Контрольный вопрос. В справке программы строка usage выглядит так. Какие из частей команды ОБЯЗАТЕЛЬНЫ при запуске?
Исходный код для этого задания:
usage: poisk.py [-h] [--level LEVEL] [--limit LIMIT] file wordПодсказка: Что в строке usage означают квадратные скобки?
Онлайн-проверка ответа появится позже
Ошибки запуска и код выхода
argparse сам проверяет команду. Забыли обязательный параметр, дали слово вместо числа, опечатались в имени флага — программа не дойдёт до вашего кода: argparse напечатает строку usage, строку error с причиной и остановит работу.
> python itogi.py rashody.csv --top пять
usage: itogi.py [-h] [--month MONTH] [--min MIN] [--top TOP] file
itogi.py: error: argument --top: invalid int value: 'пять'
> python itogi.py rashody.csv --mesyac 2026-09
usage: itogi.py [-h] [--month MONTH] [--min MIN] [--top TOP] file
itogi.py: error: unrecognized arguments: --mesyac 2026-09
Когда программа завершается, она оставляет операционной системе число — код выхода. 0 значит «всё хорошо», любое другое — «что-то не так». Обычная программа, дошедшая до конца, возвращает 0. sys.exit(1) завершает программу сразу с кодом 1 — так делают, когда работать дальше нельзя, например файла нет. argparse при ошибке в команде завершает программу с кодом 2, а после справки -h — с кодом 0.
Код выхода читают другие программы: планировщик задач, bat-файл, скрипт, который запускает вашу утилиту по расписанию. Посмотреть его можно и самим, сразу после запуска:
- PowerShell (терминал Windows и VS Code на Windows):
$LASTEXITCODE - командная строка Windows (cmd):
echo %errorlevel% - macOS и Linux:
echo $?
> python itogi.py rashody.csv --top пять
usage: itogi.py [-h] [--month MONTH] [--min MIN] [--top TOP] file
itogi.py: error: argument --top: invalid int value: 'пять'
> $LASTEXITCODE
2

Проверьте себя
Задание. Файла rashody_2025.csv в папке нет. С каким кодом выхода завершится программа? Введите число.
Исходный код для этого задания:
import sys from pathlib import Path path = Path("rashody_2025.csv") if not path.exists(): print("Нет такого файла:", path) sys.exit(1) print("Файл найден")Подсказка: Какая ветка выполнится при отсутствующем файле и что делает функция из этой ветки?
✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.
Онлайн-проверка ответа появится позже
Задание. Человек запустил итоги расходов так: python itogi.py rashody.csv —min сто. Какой код выхода покажет $LASTEXITCODE сразу после этого? Введите число.
Исходный код для этого задания:
import argparse parser = argparse.ArgumentParser(description="Итоги расходов из CSV-файла.") parser.add_argument("file", help="CSV-файл: дата;статья;сумма") parser.add_argument("--month", help="месяц в виде ГГГГ-ММ, например 2026-09") parser.add_argument("--min", type=float, default=0, help="не считать траты меньше этой суммы") parser.add_argument("--top", type=int, default=3, help="сколько крупных статей показать") args = parser.parse_args() print(args.file, args.month, args.min, args.top)Подсказка: Дойдёт ли программа до своего print? Кто её остановит и с каким кодом он это делает — сверьтесь с разделом про код выхода.
✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.
Онлайн-проверка ответа появится позже
Задание. В PowerShell выполнили две команды подряд (ниже). Какое число напечатает вторая? Введите число.
> python itogi.py -h
(на экране — справка программы)
> $LASTEXITCODE
Подсказка: Что показывает $LASTEXITCODE? Вспомните, с каким кодом argparse завершает программу после справки, — это сказано в разделе про код выхода.
✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.
Онлайн-проверка ответа появится позже
Собираем: итоги расходов с параметрами
Соединим всё в рабочую утилиту. Файл rashody.csv лежит рядом с программой, разделитель — точка с запятой, без строки заголовков:
2026-08-28;Еда;1200
2026-09-02;Еда;850
2026-09-03;Такси;420
2026-09-05;Связь;600
2026-09-11;Еда;1340
2026-09-14;Кино;700
2026-10-01;Еда;950
Программа: разбор параметров, проверка файла с кодом выхода 1, подсчёт по статьям. date.startswith(args.month) отбирает строки нужного месяца; если --month не указан, там None, и условие args.month and … пропускает фильтр — считаются все строки.
import argparse
import csv
import sys
from pathlib import Path
parser = argparse.ArgumentParser(description="Итоги расходов из CSV-файла.")
parser.add_argument("file", help="CSV-файл: дата;статья;сумма")
parser.add_argument("--month", help="месяц в виде ГГГГ-ММ, например 2026-09")
parser.add_argument("--top", type=int, default=3, help="сколько крупных статей показать")
args = parser.parse_args()
path = Path(args.file)
if not path.exists():
print("Нет такого файла:", path)
sys.exit(1)
totals = {}
with open(path, encoding="utf-8", newline="") as f:
for date, category, amount in csv.reader(f, delimiter=";"):
if args.month and not date.startswith(args.month):
continue
totals[category] = totals.get(category, 0) + int(amount)
print("Всего:", sum(totals.values()))
for category in sorted(totals, key=totals.get, reverse=True)[:args.top]:
print(category, totals[category])
> python itogi.py rashody.csv --month 2026-09
Всего: 3910
Еда 2190
Кино 700
Связь 600
> python itogi.py rashody.csv --top 2
Всего: 6060
Еда 4340
Кино 700
> python itogi.py rashodi.csv --month 2026-09
Нет такого файла: rashodi.csv
Сохраните
itogi.pyиrashody.csvв одну папку, откройте в ней терминал и запустите три команды выше. Затем добавьте к своему сортировщику «Загрузок» из главы 1 позиционный параметр с папкой и флаг--dry-run: при нём программа только печатает, что куда переехало бы.
Ещё один приём пригодится для журнала сортировщика. У split есть второй аргумент — сколько раз резать строку, не больше. split(" ", 1) режет по пробелу один раз: получается не больше двух кусков, и всё, что справа от первого пробела, идёт вторым куском целиком, вместе со своими пробелами. Так от строки журнала вида «дата время УРОВЕНЬ сообщение» можно отрезать нужное число полей, не разрезав сообщение на слова:
line = "2026-09-10 11:23 INFO Сортировка завершена"
print(line.split(" "))
print(line.split(" ", 1))
['2026-09-10', '11:23', 'INFO', 'Сортировка', 'завершена']
['2026-09-10', '11:23 INFO Сортировка завершена']
Проверьте себя
Задание. Напишите программу skidka.py целиком. Позиционный параметр price — цена (дробное число). Необязательный —percent — скидка в процентах, целое, по умолчанию 10. Флаг —round — округлить результат функцией round(). Программа печатает цену со скидкой: price * (100 — percent) / 100. Запустите её командой python skidka.py 2490 —percent 12 —round и введите число, которое она напечатала.
Команда запуска:
python skidka.py 2490 —percent 12 —round
Подсказка: Три add_argument: какой параметр позиционный, у какого type и default, какой — флаг store_true. Проверьте программу и без —round, и без —percent.
✅ Готово, если: ответ раскрывает то, что просит критерий приёмки в задании выше.
Онлайн-проверка ответа появится позже
Задание. Проектная миссия «Итоги месяца одной командой». Доведите итоги расходов до утилиты с параметрами: позиционный file — CSV-файл, —month — месяц ГГГГ-ММ (без него считаются все строки), —min — дробное число, траты меньше него не считаются, по умолчанию 0. Файла нет — программа сообщает об этом и завершается с кодом 1. Данные ниже — файл rashody.csv (utf-8, 52 строки «дата;статья;сумма», без заголовка). Запустите: python itogi.py rashody.csv —month 2026-09 —min 300. В поле ответа — сумма расходов, которую напечатала программа. Приложите файл программы .py; в поле ответа — число.
Принято, если:
1. введённое число совпадает с эталоном;
2. приложен файл .py, который это число выдаёт на данных из условия этой командой;Самопроверка перед сдачей (преподаватель смотрит на занятии):
3. python itogi.py -h показывает справку с подсказкой к каждому параметру;
4. запуск с несуществующим файлом даёт код выхода 1 (проверьте $LASTEXITCODE или echo $?).2026-08-02;Связь;706
2026-08-06;Связь;122
2026-08-08;Подарки;1220
2026-08-09;Кино;974
2026-08-09;Такси;370
2026-08-10;Связь;227
2026-08-12;Аптека;172
2026-08-12;Кино;623
2026-08-15;Одежда;1565
2026-08-16;Такси;283
2026-08-17;Связь;1746
2026-08-20;Аптека;1095
2026-08-22;Связь;910
2026-08-25;Такси;690
2026-08-27;Такси;465
2026-08-28;Подарки;654
2026-09-03;Одежда;2140
2026-09-05;Одежда;4459
2026-09-06;Такси;760
2026-09-07;Еда;873
2026-09-07;Одежда;123
2026-09-08;Такси;3985
2026-09-11;Кино;1400
2026-09-12;Такси;1543
2026-09-13;Такси;200
2026-09-15;Подарки;489
2026-09-15;Подарки;1029
2026-09-16;Еда;216
2026-09-16;Кино;946
2026-09-16;Кино;1255
2026-09-17;Кино;814
2026-09-17;Подарки;804
2026-09-18;Такси;457
2026-09-20;Одежда;159
2026-09-24;Аптека;155
2026-09-24;Еда;1288
2026-09-25;Аптека;644
2026-09-29;Еда;4206
2026-09-30;Связь;94
2026-10-02;Подарки;1201
2026-10-02;Связь;264
2026-10-07;Еда;979
2026-10-10;Аптека;201
2026-10-10;Одежда;940
2026-10-14;Одежда;4061
2026-10-17;Связь;339
2026-10-19;Еда;621
2026-10-23;Подарки;270
2026-10-24;Одежда;1259
2026-10-24;Одежда;1440
2026-10-24;Такси;1146
2026-10-25;Подарки;2621
Подсказка: Сначала отберите строки месяца, потом отсейте мелкие траты; сверьте результат без —min с ручным подсчётом нескольких строк.
✅ Готово, если: ответ раскрывает то, что просит критерий приёмки в задании выше.
Онлайн-проверка ответа появится позже
Задание. Проектная миссия «Поиск в журнале с параметрами». Сортировщик пишет журнал zhurnal.txt (utf-8, данные ниже, 50 строк вида «дата время УРОВЕНЬ сообщение»). Напишите утилиту poisk.py: позиционный file; —level — уровень записи, по умолчанию ERROR; —since — дата ГГГГ-ММ-ДД, записи раньше неё не считаются, без неё — все даты. Программа печатает число подходящих записей, а если их ноль — завершается с кодом 1. Запустите: python poisk.py zhurnal.txt —level WARNING —since 2026-09-20. В поле ответа — напечатанное число. Приложите файл программы .py; в поле ответа — число.
Принято, если:
1. введённое число совпадает с эталоном;
2. приложен файл .py, который это число выдаёт на данных из условия этой командой;Самопроверка перед сдачей (преподаватель смотрит на занятии):
3. python poisk.py zhurnal.txt без флагов ищет ERROR за все даты;
4. поиск несуществующего уровня (—level CRITICAL) завершается с кодом 1.2026-09-01 10:56 INFO Запуск по расписанию
2026-09-01 19:26 WARNING Медленный диск
2026-09-01 21:26 INFO Отчёт сохранён
2026-09-02 05:30 ERROR Не найден файл otchet.xlsx
2026-09-02 10:14 INFO Запуск по расписанию
2026-09-04 01:11 INFO Отчёт сохранён
2026-09-04 11:42 ERROR Ошибка кодировки в zametki.txt
2026-09-05 04:50 INFO Запуск по расписанию
2026-09-06 07:30 WARNING Пустая строка в rashody.csv
2026-09-07 13:57 WARNING Файл уже существует, пропуск
2026-09-10 11:23 INFO Сортировка завершена
2026-09-10 20:56 ERROR Нет доступа к папке
2026-09-11 02:46 WARNING Медленный диск
2026-09-11 10:06 INFO Сортировка завершена
2026-09-11 10:24 WARNING Файл уже существует, пропуск
2026-09-12 00:09 WARNING Медленный диск
2026-09-13 03:10 INFO Запуск по расписанию
2026-09-14 07:44 WARNING Пустая строка в rashody.csv
2026-09-15 22:52 WARNING Медленный диск
2026-09-16 01:53 INFO Запуск по расписанию
2026-09-16 05:20 INFO Сортировка завершена
2026-09-17 04:38 WARNING Пустая строка в rashody.csv
2026-09-17 11:38 INFO Сортировка завершена
2026-09-17 17:42 ERROR Нет доступа к папке
2026-09-18 04:02 ERROR Не найден файл otchet.xlsx
2026-09-18 04:59 ERROR Не найден файл otchet.xlsx
2026-09-18 17:33 INFO Сортировка завершена
2026-09-19 08:52 ERROR Не найден файл otchet.xlsx
2026-09-19 21:07 ERROR Ошибка кодировки в zametki.txt
2026-09-20 02:25 INFO Отчёт сохранён
2026-09-20 04:54 WARNING Пустая строка в rashody.csv
2026-09-20 23:59 INFO Найдено файлов: 12
2026-09-22 16:46 INFO Запуск по расписанию
2026-09-23 16:55 INFO Запуск по расписанию
2026-09-24 11:34 WARNING Файл уже существует, пропуск
2026-09-24 15:10 WARNING Медленный диск
2026-09-24 16:33 INFO Найдено файлов: 12
2026-09-25 03:42 WARNING Медленный диск
2026-09-25 07:57 WARNING Пустая строка в rashody.csv
2026-09-26 00:36 WARNING Медленный диск
2026-09-27 22:54 INFO Сортировка завершена
2026-09-27 23:55 WARNING Файл уже существует, пропуск
2026-09-28 08:09 WARNING Файл уже существует, пропуск
2026-09-28 10:37 INFO Запуск по расписанию
2026-09-28 22:45 INFO Запуск по расписанию
2026-09-29 08:11 WARNING Медленный диск
2026-09-29 18:14 WARNING Файл уже существует, пропуск
2026-09-29 19:46 WARNING Пустая строка в rashody.csv
2026-09-30 04:25 WARNING Медленный диск
2026-09-30 06:51 ERROR Ошибка кодировки в zametki.txt
Подсказка: Сообщение само содержит пробелы: режьте строку через split(» «, N) с таким числом N, чтобы дата, время и уровень отделились, а сообщение осталось одним куском. Даты в виде ГГГГ-ММ-ДД можно сравнивать как строки или через datetime из урока 2.2.
✅ Готово, если: ответ раскрывает то, что просит критерий приёмки в задании выше.
Онлайн-проверка ответа появится позже
Что дальше
Теперь вы умеете читать параметры запуска из sys.argv, описывать их через argparse — позиционные, --флаги с store_true, type, default и help, — показывать справку -h и завершать программу с кодом выхода. Ваши утилиты больше не надо править перед каждым запуском. Но командная строка удобна не всем: коллега, который не открывает терминал, ждёт окно с кнопками. В следующем уроке делаем первое окно на Tkinter.
← Назад · ↑ В начало урока · ⌂ К навигатору курса · Вперёд →
