2015-11-19 4 views
1

Я зову программу оболочки из R Markdown как этоттолько рендеринг последние X строк вывода чанка в R Markdown

```{sh} 
SomeShellProgram -options 
``` 

и сделать файл как HTML. Расчет программа займет некоторое время, для чего автор включил самообновлению прогресса «бар», который выглядит примерно так:

45MB 12,4% 935 ОТА, 3485 химер (6,7%)

Однако, особенно если прогресс идет медленно, он обновит эту строку каждые 0,1% или около того. И каждая строка визуализируется отдельно в HTML, который может доходить до 1000 строк индикаторов выполнения.

Я не хочу полностью отключать выход, например. с echo=FALSE в вариантах куска. Я делаю отчет, и информация, которая напечатана, важна.

Я ищу хак, который каким-то образом будет захватывать только последние строки X и отображать их, или, может быть, использовать grep или что-то подобное только для захвата строк, которые имеют 100% или около того.

Я попытался перенаправить вывод с > output.txt, но прогресс не был напечатан в файле (хотя была иная информация).

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

Для тех, кому это интересно: Я пытаюсь подготовить отчет по анализу данных секвенирования 16S Illumina, и я использую Usearch, а команда, которая дает мне больше всего головной боли, - это команда usearch -cluster_otus.

UPDATE

Существует еще одна проблема с оказанием последних X строк: Строка прогресса в выходе ограниченного ^M (символы возврата каретки), а не разрывы строк, поэтому less только распознает его как одна строка. Поэтому мое окончательное решение включает в себя

  1. перенаправив вывод из строки состояния с 2> в файл
  2. заменяя ^M символов с разрывами строк, используя sed
  3. рендеринга последних X строк с less

Мой (псевдо) код для этого на mac osx следующий (где X = количество строк)

FunctionWithProgressBar -option 2> tempfile.tmp 
sed -ibak $'s/\x0D/\\\n/g' tempfile.tmp 
tail -nX tempfile.tmp 

и в R Markdown:

```{sh, results="hide"} 
FunctionWithProgressBar -option 2> tempfile.tmp 
``` 
```{sh, echo=FALSE} 
sed -ibak $'s/\x0D/\\\n/g' tempfile.tmp 
tail -nX tempfile.tmp 
``` 

отмечает, что соответствие с забоем является болью в прикладе (особенно на OSX) и изменения между платформами.

ответ

0

бар прогресс, вероятно, в Sterr потоке, так что вы захватить его с «2>», а не «>», чтобы вы могли захватить потоки вывода отдельно, например:

usearch blablabla 2> only_err > only_stdout 

Или, если вы хотите все выходные вместе, вы должны перенаправить поток ошибок на стандартный вывод, и сделать Append, как таковой:

usearch blablabla >> total_output 2>&1 

Что касается R-уценки части, я не могу помочь, никогда не использовал, извините.

С уважением,

Moritz

+0

благодаря Moritz, она прекрасно работает. Мне просто нужно перенаправить '2>' в файл, а затем я могу напечатать только последнюю строку с 'tail file'. Markdown напечатает все, что напечатано на консоли, и поскольку ничего не будет напечатано на консоли, если я перенаправляю поток рулевого управления, он отлично работает! – Latrunculia

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