Вывод подпроцесса добавляется в файл раньше времени - PullRequest
0 голосов
/ 11 марта 2019

Я использую подпроцесс для вывода вывода std и ошибки std в соответствующие файлы.Когда я пытаюсь вывести время в оба файла перед соответствующими сообщениями, оно записывается в конце.

Ниже приведен код

import time
from subprocess import call

datetime_log = time.strftime("%Y-%m-%d %H:%M:%S")
with open("stdout.txt","ab") as stdout_file, open("stderr.txt","ab") as stderr_file:
    stdout_file.write(datetime_log + '\n'); stderr_file.write(datetime_log + '\n')
    call(['ls'], stdout = stdout_file, stderr = stderr_file)

Вывод stdout.txt:

pyshell1.py
pyshell2.py
stderr.txt
stdout.txt
2019-03-11 17:59:48
pyshell1.py
pyshell2.py
stderr.txt
stdout.txt
2019-03-11 18:06:17

Как напечатать время до вывода команды подпроцесса ls.

1 Ответ

2 голосов
/ 11 марта 2019

Вам необходимо очистить буфер:

stdout_file.write(datetime_log + '\n')
stderr_file.write(datetime_log + '\n')
stdout_file.flush()
stderr_file.flush()
call(['ls'], stdout=stdout_file, stderr=stderr_file)
...