2014-11-11 3 views
1

Я пытался запустить первичную статистику в Python с использованием подпроцесса. я заметил, поведение, которое я думаю, любопытно, это код:subprocess.communicate on perf stat не возвращает ожидаемый stdout, stderr

import subprocess 
cmd="perf stat -e cache-misses echo stdout" 

p = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE) 
out,err = p.communicate() 

print "OUT",out 
print "ERR",err 

И это выход:

Performance counter stats for 'echo stdout': 

      1,759 cache-misses             

     0.000868593 seconds time elapsed 

OUT stdout 

ERR 

Выход команды, которая профилируется на перфорации правильно возвращается как стандартный вывод. На stderr должны быть возвращены статистические данные из перфоратора, вместо этого они печатаются на экране вместо сохранения в переменной err после сообщения.

Я также попытался удалить shell=True, но это не повлияет на результат.

Почему это происходит?

+1

[Какой поток использует перфект?] (Http://unix.stackexchange.com/a/89594). – Himal

+0

Попробуйте 'perf stat -x, -e ...'. Флаг -x создает машиночитаемый вывод. https://perf.wiki.kernel.org/index.php/Tutorial#Counting_with_perf_stat –

+0

Моя 'perf -version' говорит' perf версии 0.0.2.PERF', и она делает то, что вы ожидаете: 'perf' вывод записывается в 'err'. –

ответ

0

Я пробовал следующее на Ubuntu 14.10, и это похоже на работу. Вывод будет в stderr_output:

import subprocess 

if __name__ == '__main__': 
    cmd = ['perf', 'stat', '-x,', '-e', 'cache-misses', 'echo', 'stdout'] 
    print 'cmd:', cmd 
    process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
    stdout_output, stderr_output = process.communicate() 

    print "\nOutput:" 
    print stdout_output, 

    print '\nError:' 
    print stderr_output 

Обсуждение

  • Я расщепляется команду в список, и он работает, оставьте его в одну строку, и это не
  • я не должен использовать shell=True
  • Если вы не хотите, машиночитаемый вывод, удалите -x, вариант
+0

Какую версию перформанса вы используете? – igon

+0

Я на работе не могу проверить, но я установил это вчера вечером. –

 Смежные вопросы

  • Нет связанных вопросов^_^