Я пытался запустить первичную статистику в 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
, но это не повлияет на результат.
Почему это происходит?
[Какой поток использует перфект?] (Http://unix.stackexchange.com/a/89594). – Himal
Попробуйте 'perf stat -x, -e ...'. Флаг -x создает машиночитаемый вывод. https://perf.wiki.kernel.org/index.php/Tutorial#Counting_with_perf_stat –
Моя 'perf -version' говорит' perf версии 0.0.2.PERF', и она делает то, что вы ожидаете: 'perf' вывод записывается в 'err'. –