«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как я могу заставить замолчать подпроцессный вывод в Python?

Как я могу заставить замолчать подпроцессный вывод в Python?

Опубликовано в 2025-01-26
Просматривать:269

How Can I Silence Subprocess Output in Python?

Отключение вывода подпроцесса в Python: подробное руководство

В сфере программирования на Python часто возникает необходимость выполнять внешние команды или процессы из скриптов Python. Модуль подпроцесса предоставляет для этой цели мощный механизм, позволяющий программам Python взаимодействовать с операционной системой и выполнять команды контролируемым образом.

Одной из распространенных проблем, с которыми сталкиваются при использовании подпроцесса, является возможность генерации исполняемой команды нежелательный вывод, который может загромождать терминал или дисплей вывода и мешать читаемости собственного вывода сценария. Это особенно распространено при использовании команд, которые предоставляют диагностические сообщения или подробные обновления статуса.

Подход для Python 3.3 и более поздних версий

Если вы используете Python версии 3.3 или более поздней версии, отключение вывода подпроцесса становится проблемой простая задача благодаря введению константы DEVNULL. Эта константа представляет собой файлоподобный объект, который отбрасывает любые записанные в него данные, эффективно перенаправляя вывод в никуда.

Чтобы использовать DEVNULL и подавить вывод подпроцесса, просто перенаправьте на него потоки stdout и stderr:

import subprocess

retcode = subprocess.call(['echo', 'foo'],
    stdout=subprocess.DEVNULL,
    stderr=subprocess.STDOUT)

Этот подход гарантирует, что как стандартный вывод, так и потоки стандартных ошибок из подпроцесса направляются на устройство DEVNULL, предотвращая попадание нежелательных сообщений на терминал.

Подход для Python 2.7 и более ранних версий

Для версий Python до 3.3, включая широко используемый Python 2.7, подавление вывода подпроцесса требует несколько иного подхода. подход. В Python 2.7 отсутствует константа DEVNULL, поэтому нам придется вручную открыть файл /dev/null и перенаправить в него выходные данные.

Вот как этого можно добиться в Python 2.7:

import os
import subprocess

FNULL = open(os.devnull, 'w')
retcode = subprocess.call(['echo', 'foo'],
    stdout=FNULL,
    stderr=subprocess.STDOUT)

Открыв файл /dev/null (представляющий нулевое устройство, которое отбрасывает любые записанные в него данные) и передав его в качестве аргументов stdout и stderr в subprocess.call(), мы эффективно перенаправляем весь вывод подпроцесса в пустоту, обеспечивая чистый и незагроможденный терминал.

Альтернативный метод: команда Shell Перенаправление

Для полноты картины стоит упомянуть альтернативный подход, который предполагает перенаправление вывода с помощью команды оболочки. Хотя этот метод менее переносим и его обычно не рекомендуется использовать в сценариях Python, он может быть полезен в определенных сценариях:

retcode = os.system("echo 'foo' > /dev/null")

Этот подход напрямую выполняет команду оболочки, перенаправляя вывод команды echo в /dev/null с помощью оператора >.

Независимо от того, какой подход вы выберете, общая цель состоит в том, чтобы подавить ненужный вывод подпроцесса и поддерживать чистое и читаемое отображение вывода. Используя эти методы, вы можете эффективно скрыть выходные данные подпроцесса и гарантировать, что пользователю будет представлена ​​только нужная информация.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3