Вы можете использовать subprocess.check_output([cmd], stderr=STDOUT)
для захвата всего вывода.
Для захвата stdout, stderr отдельно вы можете использовать .communicate()
:
stdout, stderr = Popen([cmd], stdout=PIPE, stderr=PIPE).communicate()
Чтобы получить все строки без символа новой строки в конце, вы можете вызвать stderr.splitlines()
.
Чтобы не печатать дополнительный символ новой строки, если он уже присутствует, добавьте ','
после переменной в операторе печати:
print line,
Или, если вы используете print()
функцию:
print(line, end='')
Примечание
Ваш Getstatusoutput2()
заблокируется, если cmd
выдаст достаточно выходных данных, вместо этого используйте вышеуказанные решения:
>>> len(Getstatusoutput2(['python', '-c',"""print "*"*2**6"""])[1])
65
>>> len(Getstatusoutput2(['python', '-c',"""print "*"*2**16"""])[1])
Popen.wait()
документация :
Подождите, пока дочерний процесс не прекратится. Установить и вернуть код возврата атрибута.
Предупреждение : Это приведет к взаимоблокировке при использовании stdout = PIPE и / или stderr = PIPE, и дочерний процесс генерирует достаточный вывод в канал, так что он блокирует ожидание буфера канала ОС для приема большего количества данных. Чтобы избежать этого, используйте connect ().
Связано Используйте связь () вместо stdin.write (), stdout.read () или stderr.read ()