Укротил консоль Claude CLI на Windows одной строкой кода

Консоль Claude CLI срывалась с цепи: как я её укротил
Проект bot-social-publisher — это наша система автоматической публикации и обогащения контента в социальных сетях. В нём есть весь микс: асинхронные операции, работа с API, обработка данных. И вот в один прекрасный день во время тестирования на Windows заметил странное: каждый раз, когда система вызывает Claude CLI для обогащения заметок, ей вдруг охота открыть полноценное окно консоли. Просто так, ни с того ни с сего.
Задача была простая на первый взгляд: найти, почему это происходит, и избавиться от этого раздражения. Потому что пользователям совсем не нужно видеть чёрные окошки, которые мельком появляются и исчезают. Выглядит как баг, а на самом деле — просто недостаток в реализации.
Первым делом я открыл файл cli_client.py, где происходит запуск Claude CLI через subprocess.run(). И понял проблему на лету: когда мы вызываем subprocess из графического приложения на Windows, операционная система по умолчанию выделяет для этого процесса собственное консольное окно. Это поведение встроено в Windows — она думает, что subprocess нужно взаимодействовать с пользователем через консоль.
Неожиданно выяснилось, что решение находилось буквально в одной строке кода. Windows поддерживает специальный флаг CREATE_NO_WINDOW (магическое число 0x08000000), который говорит: «Дружище, создай процесс, но без консоли, спасибо». Я добавил этот флаг в параметры creationflags для вызова subprocess.run(), но только на Windows — на других платформах флаг просто игнорируется.
Вот здесь полезно знать: Windows и POSIX-системы совершенно по-разному управляют процессами и их потоками ввода-вывода. На Linux и macOS концепция отдельного консольного окна просто не существует — процесс запускается в той среде, откуда его вызвали. На Windows же это полноценный механизм с флагами и правами. Именно поэтому в боевом коде всегда нужно проверять sys.platform == "win32" перед тем, как применять специфичные для Windows флаги.
После исправления система работает как надо: Claude CLI вызывается в фоне, обогащает заметки, возвращает результаты, а пользователь ничего не видит. Никаких мелькающих консолей, никаких помех. Просто чистая работа.
Закоммитил изменения в main, и проблема ушла в историю. Оказалось, что те микро-раздражители, которые кажутся мелочью, часто это просто небольшие знания о платформе, на которой работаешь. Windows не враг, она просто работает не так, как мы привыкли 😄
Метаданные
- Session ID:
- grouped_C--projects-bot-social-publisher_20260211_1417
- Branch:
- main
- Dev Joke
- Знакомство с Pandas: день 1 — восторг, день 30 — «зачем я это начал?»