Отсутствует вывод из команды подпроцесса - PullRequest
4 голосов
/ 07 июля 2011

Я работаю над проектом для запуска проверки стиля PEP8 на локальных проектах.Я попытался использовать метод подпроцесса, и я могу получить сгенерированный вывод терминала с советами по улучшению стиля и сохранить его в строку.

Мой код для генерации стиля PEP8 выглядит следующим образом:

def run_pep8_style(target):
    pep_tips = subprocess.Popen("python pep8.py --ignore=E111,E501 --filename=*.py " + target, shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
    tips = pep_tips.communicate()[0]

    print "Style: "
    print tips

Однако я попытался сгенерировать счет, используя тот же метод подпроцесса и хранилище, но мне это не удалось.Терминал отображает вывод, но он не записывается в строковую переменную.

def run_pep8_count(target):
    pep_tips = subprocess.Popen("python pep8.py --ignore=E111,E501 --count -qq --filename=*.py  " + target, shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
    tips = pep_tips.communicate()[0]
    print "Count: "
    print tips

Странно то, что я могу сохранить список стилей из терминального текста в строковую переменную, но он не возвращает ничего, когдаЯ пытаюсь захватить количество PEP8.Отличается ли вывод терминала от списка стилей?Я новичок в программировании на Python, поэтому любая помощь будет оценена.Спасибо.

1 Ответ

2 голосов
/ 07 июля 2011

Согласно документы , pep8.py --count печатают в stderr:

--count              print total number of errors and warnings to standard
                       error and set exit code to 1 if total is not null

Так что вам нужно указать subprocss.Popen, чтобы направить stderr в subprocess.PIPE:

pep_tips = subprocess.Popen("python pep8.py --ignore=E111,E501 --count -qq          
               --filename=*.py  " + target, shell=False,
               stdin=subprocess.PIPE, stdout=subprocess.PIPE, 
               stderr=subprocess.PIPE)

tips,tips_err = pep_tips.communicate()
print tips_err
...