Я, должно быть, упускаю из виду нечто ужасно очевидное. Мне нужно выполнить программу на C, отобразить ее вывод в режиме реального времени и, наконец, проанализировать ее последнюю строку, что должно быть просто, поскольку последняя напечатанная строка всегда одинакова.
process = subprocess.Popen(args, shell = True,
stdout = subprocess.PIPE, stderr = subprocess.PIPE)
# None indicates that the process hasn't terminated yet.
while process.poll() is None:
# Always save the last non-emtpy line that was output by the child
# process, as it will write an empty line when closing its stdout.
out = process.stdout.readline()
if out:
last_non_empty_line = out
if verbose:
sys.stdout.write(out)
sys.stdout.flush()
# Parse 'out' here...
Время от времени, однако, последняя строка не печатается. Значение по умолчанию для bufsize Попенса равно 0, поэтому предполагается, что оно небуферизовано. Я также пытался, но безрезультатно, добавить fflush (stdout) к коду C непосредственно перед выходом, но кажется, что абсолютно нет необходимости очищать поток перед выходом из программы.
Идеи кому-нибудь?