При создании объекта Popen вы получаете поток байтов как stdout
.
Это объясняется в документации
Если были заданы аргументы encoding
или errors
или аргумент universal_newlines
был True
, поток является текстовым потоком, в противном случае это поток байтов.
Поэтому, когда вы сравниваете line
с пустой строкой , она всегда будет неравной, поскольку line
в лучшем случае может быть пустым byte
объектом, b''
.
Пустой байтовый объект является ложным значением, поэтому замена if line != ''
на if line:
работает как для пустой строки, так и для пустого байтового объекта.
Если позже вы захотите, чтобы stdout
был текстовым потоком, код не нарушается:)
while True:
line = proc.stdout.readline()
if line:
#the real code does filtering here
print(line)
else:
break