У меня проблема с чтением стандартного вывода в Python.Я должен немного объяснить, что я пытаюсь сделать.
У меня есть программа на Python ( foo );это вызывает вторую программу на Python ( bar ). bar вернет детали статуса stdout и другую информацию для регистрации. foo теперь должен прочитать это.В принципе это работает.Я могу получить вывод bar и отправить его в файл журнала без каких-либо проблем.Проблемы начинаются, когда я пытаюсь найти определенные фразы в выводе bar (отчет о состоянии).
Я читаю вывод с os.read (fn, n) из стандартного вывода bar .Проблема в том, что os.read читает n байтов, но не строку;это может быть больше или меньше.Я хочу, чтобы он читал каждую строку, которая записывается в стандартный вывод bar , эти строки заканчиваются на \ n и пишутся либо с print , либо с sys.stdout.write , за которым следует sys.stdout.flush () .
foo , звонки bar с использованием:
bar= subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
fd_in[0] = bar.stdout.fileno()
fd_in[1] = bar.stderr.fileno()
Мой код выглядит следующим образом. bar пишет:
print 'TAG INFO1 INFO2 INFO3'
#or
sys.stdout.write('TAG INFO1 INFO2 INFO3\n')
sys.stdout.flush()
Я читаю в foo с
buf = os.read(fd_in[0], 256)
Когда я записываю это в файл журнала с помощью:
int_logFile.write(buf)
int_logFile.flush()
все хорошо.Но если я хочу получить первое слово строки вывода, как это:
tokens = buf.strip('\n').split(' ')
Я в конечном итоге в missery, потому что я не получаю TAG, но я мог бы иметь INFOx или что-то из предыдущего вывода ничегоделать с моими сообщениями о состоянии.
Итак, чтобы подвести итог, мне нужно прочитать строку bar построчно в foo .Есть идеи ???