Как копировать поток и обработать обе части в потоковой передаче путь?

Linux, и я воображаю OSX также, идет с универсальным драйвером USB, который позволяет приложениям говорить непосредственно на уровне USB. Это - довольно простая функция; то, что удивительно мне, скорее, как Windows иногда требует определенного для телефона драйвера для adb.

3
14.04.2013, 08:53
2 ответа

Можно использовать tee и замена процесса >(...) для этого:

zcat my_data_file.gz |

# Count number of lines in stream
tee >(wc -l > /tmp/linecount) |

# Further processing
process_data.py

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

4
27.01.2020, 21:17
  • 1
    я обнаружил это только этим днем по совпадению.Спасибо! –  Cera 15.04.2013, 15:27

Это не совсем эффективно, но можно достигнуть этого с именованными каналами, с которыми можно создать mkififo(1)

Для примера в вопросе:

mkfifo /tmp/f

wc -l /tmp/f > /tmp/linecount &

zcat my_data_file.gz \
| tee /tmp/f \
| process_data.py &

wait

rm /tmp/f

Отметьте & добавленный обоим wc и конвейер; это означает, что оболочка продвинет к задачам к фону. Вызов к wait затем ожидает всех фоновых задач для завершения. Оба процесса закончатся примерно в то же время.

Остерегайтесь этого, если один из Ваших процессов существенно медленнее, он мог бы значительно замедлить все это, как tee может заблокироваться или на его канале stdout или на именованном канале, в который он пишет.Править: Кроме того, это теперь получило больше видов отказа, поскольку мишень выйдет из-за поврежденного канала, если Ваш вторичный процесс перестанет работать.

1
27.01.2020, 21:17
  • 1
    Если производительность крайне важна, и процесс, который Вы хотите выполнить, довольно тривиален, Вы могли бы повторно реализовать (например), версию wc это печатает его результат к stderr и гарантирует, что каждый байт от stdin выходит из своего stdout. Остерегайтесь, тем не менее, что архитектурно более 'эффективная' реализация может быть медленнее так или иначе как coreutils, и sed/awk в большой степени оптимизированы для многих задач. –  Cera 14.04.2013, 08:54

Теги

Похожие вопросы