2016-11-21 3 views
-1

Я пытаюсь автоматически собирать данные о производительности (время загрузки и рендеринга экрана) из приложения для Android. Я использую test-runner.py (внутренний инструмент) для создания приложения и запуска тестов перед использованием команды adb для получения данных о производительности. Мой Баш скрипт выглядит следующим образом:tee не будет записываться в файл до тех пор, пока скрипт не завершит выполнение?

BASE_DIR=../Application/app/src/custom-feeds 
CTF_DIR=../../../../ComponentTestFramework 
OUTPUT_FILE=out.txt 

if test -e $OUTPUT_FILE 
then 
    rm $OUTPUT_FILE 
fi 

teardown() 
{ 
    cd $BASE_DIR 
    adb logcat -d PerformanceTest:D *:S | grep 'Loading' | tee -a $OUTPUT_FILE 
    adb logcat -d ActivityManager:I *:S | grep 'ContentBrowseActivity:\s+\+' | tee -a $OUTPUT_FILE 
    ./restore.sh 
} 

# small sample feed 

echo Testing sample feed with 10 initial items 
echo size = 10 > $OUTPUT_FILE 
cd $CTF_DIR 
python3 test_runner.py -f $BASE_DIR/config-B-10.json 
teardown 

# medium sample feed 

echo Testing sample feed with 100 initial items 
echo size = 100 > $OUTPUT_FILE 
cd $CTF_DIR 
python3 test_runner.py -f $BASE_DIR/config-B-100.json 
teardown 

# large sample feed 

echo Testing sample feed with 500 initial items 
echo size = 500 > $OUTPUT_FILE 
cd $CTF_DIR 
python3 test_runner.py -f $BASE_DIR/config-B-500.json 
teardown 

# super large sample feed 

echo Testing sample feed with 5000 initial items 
echo size = 5000 > $OUTPUT_FILE 
cd $CTF_DIR 
python3 test_runner.py -f $BASE_DIR/config-B-5000.json 
teardown 

Когда скрипт первый запуск, данные получает записывается в выходной файл, как и ожидалось:

size = 100 

Однако, ничего не будет записано, пока сценарий не закончит выполнение , Выходной файл теперь выглядит следующим образом:

size = 5000 
D/PerformanceTest(1458): Loading time: 332874 ms 
I/ActivityManager(1843): Displayed com.amazon.android.calypso/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: +563ms 

Есть два вопроса:

  1. Исходные данные ("размер = 100") было написано. Этого не должно произойти из-за переключателя -a в tee.
  2. Промежуточные результаты не записываются в файл, даже если команда работает, когда я выполняю ее вне сценария.

Что я делаю неправильно?

+0

Это не редкость для 'tee' или многих других для буферизации их вывода, поэтому он не будет писать до тех пор, пока не будет достигнуто определенное количество данных в очереди или не будет достигнут конец потока. Я не удивлюсь, если это будет происходить здесь. [См. Здесь] (http://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe) для некоторых вариантов справиться с этим, если это то, что происходит здесь –

+0

«размер = 100» не собирается через тройник. 'size = 100' перенаправляется, и перенаправление обрезает файл, отбрасывающий результаты предыдущего прогона. –

+0

А, я вижу проблему сейчас. Спасибо за ответы. Я хотел добавить в файл, используя '>>', но написал '>' вместо этого. \ * Facepalm \ *. –

ответ

0

Отвечая на мой собственный вопрос в смущении.

Вопрос был из-за моего использования > (который перезаписывает файл), чем >> (который прилагается к нему). Использование >>, очевидно, решило проблему. Я все еще сталкиваюсь с этим, когда я печатаю это.

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