Как я могу закончить запись в файл для случаев, когда> используется для обхода консоли в Python - PullRequest
0 голосов
/ 30 марта 2019

Итак, я выполняю код:

python my_app.py > console.txt

Итак, это позволяет мне создать файл на диске со всеми распечатками консоли.

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

Я попробовал это:

 my_file = open('console.txt', 'r+', 1)
        my_file.flush()
        os.fsync(my_file.fileno())
        my_file.close()

        time.sleep(60)

        filename = 'console.txt'
        with open(filename, "r+", 1) as attachment:
            print(attachment.readline(-20))
            attachment.flush()
            os.fsync(attachment.fileno())

            time.sleep(60)
            # Add file as application/octet-stream
            # Email client can usually download this automatically as
            # attachment
            part = MIMEBase("application", "octet-stream")
            part.set_payload(attachment.read())
        attachment.close()

        # # Encode file in ASCII characters to send by email
        encoders.encode_base64(part)

        # Add header as key/value pair to attachment part
        part.add_header(
            "Content-Disposition",
            "attachment; filename={}".format(filename),
        )

        # Add attachment to message and convert message to string
        email.attach(part)

Но все равно файл отправляется усеченным.Любые идеи или советы о том, как записать все на диск, мои ручные триггеры здесь не работают: (

Ответы [ 2 ]

0 голосов
/ 30 марта 2019

Мне удалось это исправить, выполнив следующее:

sys.stdout.flush()
0 голосов
/ 30 марта 2019

Код перемещает позицию потока (или указатель файла) в операторе readline(-20).

Указатель файла необходимо переместить обратно в начало файла, вызвав attachment.read(0) перед повторным чтением, если код для чтения всего файла.

...