Python Консоль и экспорт в файл - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть функция, которая печатает текст на консоли. Ниже приведена версия того, как выглядит код (на самом деле это много строк истории, поэтому я суммирую ее). Мой вопрос - есть ли другая функция, которую я могу написать, чтобы взять all_text () и сгенерировать файл docx с этим? Мне удалось создать файл .txt, но в идеале я хотел бы создать что-то с параметрами форматирования.

from docx import Document


document = Document()

def all_text():
     print("Line1\nLine2\nLine3")

document.add_paragraph(all_text())
document.save("demo.docx")

1 Ответ

0 голосов
/ 11 февраля 2020

Document.add_paragraph() ожидает строку. Ваша функция all_text() не возвращает строку, а записывает в sys.stdout (который по умолчанию перенаправлен на вашу консоль) и (неявно) возвращает None.

Чистое решение, конечно, нужно изменить ваша all_text() функция, чтобы она возвращала строку вместо записи в sys.stdout ie

def all_text():
    return "Line1\nLine2\nLine3"

Если ваша настоящая функция действительно много печатает в разных местах и ​​/ или вызывает функции, которые сами по себе печать в stdout et c, что делает «чистое решение» непрактичным или слишком дорогим, вы также можете взломать, перенаправив sys.stdout на StringIO и отправив собранные значения на add_paragraph, ie:

import sys
try:
   from io import StringIO # py3
except ImportError:
   from cStringIO import StringIO

def all_text():
     print("Line1\nLine2\nLine3")


def get_all_text():
    sys.stdout = buffer = StringIO
    try:
        all_text()
        return  buffer.getvalue()
    finally:
        sys.stdout = sys.__stdout__

document.add_paragraph(get_all_text())
...