Я хочу запустить некоторую команду и получить все, что выводится на stderr. У меня есть две версии функции, которая выполняет эту версию 1
def Getstatusoutput(cmd):
"""Return (status, output) of executing cmd in a shell."""
import sys
mswindows = (sys.platform == "win32")
import os
if not mswindows:
cmd = '{ ' + cmd + '; }'
pipe = os.popen(cmd + ' 2>&1', 'r')
text = pipe.read()
sts = pipe.close()
if sts is None: sts = 0
if text[-1:] == '\n': text = text[:-1]
return sts, text
и версию 2
def Getstatusoutput2(cmd):
proc = subprocess.Popen(cmd, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
return_code = proc.wait()
return return_code, proc.stdout.read(), proc.stderr.read()
Первая версия печатает вывод stderr, как я ожидал. Вторая версия печатает одну пустую строку после каждого строка. Я подозреваю, что это из-за строки text [-1:] в версии 1 ... но я не могу сделать что-то подобное во второй версии. Кто-нибудь может объяснить, что мне нужно сделать, чтобы вторая функция генерировала тот же результат, что и первый, без лишних строк между ними (и в самом конце)?
Обновление: вот как я распечатываю результат Вот как я печатаю
status, output, error = Getstatusoutput2(cmd)
s, oldOutput = Getstatusoutput(cmd)
print "oldOutput = <<%s>>" % (oldOutput)
print "error = <<%s>>" % (error)