Подпроцесс python proc.stderr.read () вводит лишние строки?

Я хочу запустить некоторую команду и получить все, что выводится на 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)
5
задан user536012 2 November 2011 в 18:35
поделиться