К обсуждениям

Python 3.14.7: Py_RunMain возвращает exit code embedding-приложению

Редакция VOne Технологии

Python 3.14.7: Py_RunMain возвращает exit code embedding-приложению. Практическая проверка отделяет симптом от соседних причин: безопасный fixture, опровергающий control, измеримая развилка, стоп-линия и минимальный пакет для поддержки.

Что изменилось

Запрос ограничен формулировкой «как проверить что Py_RunMain возвращает код вместо завершения embedding process в Python 3.14.7». Наблюдаемый симптом: встроенный Python выполняет script, command или REPL с SystemExit и неожиданно завершает всё host-приложение вместо возврата управления. Официально подтверждена более узкая граница: Py_RunMain возвращает exit code, а не вызывает Py_Exit, при запуске script, command или REPL. Это не означает, что любой похожий crash, warning, hang или неверный результат вызван именно этой ошибкой. Сначала запишите точную версию Python, режим сборки, платформу и один ожидаемый переход состояния; обновление всей среды не должно быть первым действием.

Подготовка fixture

Для паспорта T21-25 выполните только такой опыт: собрать минимальный C host, поставить marker сразу после Py_RunMain и запустить три child cases с sys.exit(7) для command, file и module. Входы должны быть синтетическими, а рискованный код — жить в отдельном child process, контейнере, pty или temp root. До запуска задайте deadline, лимит памяти и допустимые файлы. Не используйте реальные архивы, токены, адреса, пользовательские документы или production PID. Если нужный backend, libc, compiler или GUI недоступен, зафиксируйте environment blocker: это честнее, чем имитировать результат.

Сравнение A/B

Опровергающая ветка: нормальное завершение с кодом 0 и host без вызова Py_RunMain, который всегда печатает post-marker. Наблюдения пишутся строго как «run mode | requested SystemExit | Py_RunMain return | post-marker present | host exit code». Сначала выполните control A, затем проблемный case B, полностью пересоздайте fixture и повторите A2. Если A2 расходится с A, опыт загрязнён cache, locale, descriptor, signal state или environment. Пустая ячейка не равна нулю, а текст exception не заменяет его класс. Такое разделение не позволяет объявить исправление только потому, что один запуск случайно не упал.

Решение по фактам

Зелёная ветка разрешена только когда во всех целевых modes host доходит до post-marker и самостоятельно возвращает полученный code; zero control остаётся нулевым. Если оба варианта ведут себя одинаково плохо, чините fixture, а не Python. Если control чист, но симптом не воспроизводится, итог — not reproduced в конкретной конфигурации, не доказательство отсутствия дефекта вообще. Сравнение 3.14.6 и 3.14.7 допустимо лишь с одинаковым input и limits. Результат относится к issue-boundary, а не к скорости, безопасности или совместимости всего приложения.

Остановка без ущерба

Стоп-линия: не встраивать fixture в рабочий daemon и ограничить child общим deadline. Остановитесь также при записи вне temp root, внешнем сетевом запросе, появлении приватных данных, неконтролируемом descendant process или превышении deadline. Не получайте зелёный статус отключением проверок, catch-all обработчиком, бесконечным retry или повышением лимитов после сбоя. Возврат должен быть проверяемым: удалить test executable, source и временный script; shared libraries и linker config не менять. После этого ещё раз снимите process/file inventory и убедитесь, что состояние совпало с baseline.

Минимум для тикета

Для issue #152132 достаточно передать: Python build, compiler, три run modes, requested/returned codes, marker state и host exit code. Добавьте московский timestamp, labels A/B/A2 и точный критерий «{topic['green']}». Абсолютные пути, PIDs, hostnames, environment dumps, core dumps и содержимое рабочих файлов удалите или замените метками. Официальные источники подтверждают изменение «{topic['boundary']}», но не популярность запроса, позиции в поиске или готовность вашей системы. Такой пакет позволяет повторить один переход без доступа к инфраструктуре.

Материал подготовлен редакцией VOne с помощью ИИ по открытым официальным и первичным источникам; факты, даты и ссылки перепроверены. Реальные пользовательские данные не использовались.

Источники и проверка

Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.

Ответы

0 опубликовано
Ответов пока нет. Вы можете начать обсуждение.

Ваш ответ

Добавьте свой опыт или уточнение по теме.

Вы публикуете как Аноним Аватар отличает разговоры, но не раскрывает личные данные.

Ответ появится сразу. Не публикуйте личные данные, ключи и приватные ссылки.