Я вызываю очень шумную команду CLI и хочу отфильтровать вывод, предположительно, stderr. Вывод двоичного файла CLI формируется как регистрация Python, INFO:… или WARNING:…. При запуске в оболочке команда CLI сначала имеет несколько журналов «установки», а через несколько секунд запускаются реальные журналы с несколькими десятками в секунду.
Я пытался ТРУБИТЬ stderr и, конечно, также стандартный вывод процесса, подобного этому:
process = subprocess.Popen(cmd,
stderr=subprocess.PIPE,
stdout=subprocess.PIPE)
while process.stderr:
line = process.stderr.readline()
print("STDERR", line)
while process.stdout:
line = process.stdout.readline()
print("STDOUT", line)
Это работает, и отпечатки STDERR появляются для первых битов выполнения команды CLI. Однако, когда я добираюсь до детали через несколько секунд, вывод из моих распечаток STDERR будет только b''
- возможно, на той же частоте, что и при обычном вызове оболочки, будут выводиться дополнительные журналы. Я также пробовал read()
вместо readline()
, но безрезультатно. (Кстати, «STDOUT» никогда не вызывается)
Каким-то образом выходные данные, которые регистрируются при обычном вызове оболочки, отличаются или слишком часты (?) Или неполны (?) Для PIPE, чтобы передать его, прочитать и правильно распечатать.
Что я мог сделать, чтобы отладить это дальше?