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

Как эффективно захватывать выходные данные программы в Python: помимо базовых решений

Опубликовано 8 ноября 2024 г.
Просматривать:261

How to Capture Program Output Effectively in Python: Beyond Basic Solutions

Захват вывода программы: за пределами наивных решений

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

# writer.py
import sys

def write():
    sys.stdout.write("foobar")

Попытка записать выходные данные с помощью следующего кода завершается неудачей:

# mymodule.py
from writer import write

out = write()
print(out.upper())

Для эффективного захвата вывода требуется более надежное решение. Один из подходов предполагает изменение системного потока stdout:

import sys
from cStringIO import StringIO

# Redirect stdout to a StringIO object
backup = sys.stdout
sys.stdout = StringIO()

# Perform the write operation
write()

# Retrieve and restore stdout
out = sys.stdout.getvalue()
sys.stdout.close()
sys.stdout = backup

# Process the captured output
print(out.upper())

Контекстный менеджер для Python 3.4 :

Для Python 3.4 и более поздних версий доступно более простое и краткое решение с использованием contextlib. Менеджер контекста redirect_stdout:

from contextlib import redirect_stdout
import io

f = io.StringIO()
# Redirect stdout to f using the context manager
with redirect_stdout(f):
    help(pow)

# Retrieve captured output from f
s = f.getvalue()

Этот элегантный подход упрощает процесс захвата выходных данных, упрощая его обработку в ваших скриптах Python.

Заявление о выпуске Эта статья перепечатана по адресу: 1729147521. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

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

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

Copyright© 2022 湘ICP备2022001581号-3