Хобрук: Ваш путь к мастерству в программировании

Как соединить процессы через конвейер в Perl?

Я хочу написать Perl-скрипт, который запускает программы foo и bar, обрабатывает stdout из foo и передает их stdin из bar в потоковом режиме. Сценарий Perl должен действовать как эта команда bash:

$ foo | some-perl-code | bar

Мне удалось сделать первую часть с фрагментом ниже. Я запускаю программу foo и открываю канал для чтения stdout.

open( my $pipe_fh, "foo |" );
while ( my $row = <$pipe_fh> ) {
   # do stuff
    print $row;
}

Как я могу реализовать вторую часть? Как передать $row программе bar внутри моего Perl-скрипта?

31.07.2018

  • Почему это должно быть в сценарии Perl? Почему вы не можете использовать bash напрямую? 31.07.2018

Ответы:


1

Просто используйте другое открытие, но верните направление трубы:

open my $in,  '-|', 'foo' or die $!;
open my $out, '|-', 'bar' or die $!;
while ( my $row = <$in> ) {
    # do stuff
    print {$out} $row;
}
31.07.2018

2

Другой вариант — использовать IPC::Pipeline для объединения процессов в цепочку вместо того, чтобы делать это вручную.

31.07.2018

3

IPC::Run — еще один (несколько пугающий) вариант. Если вы столкнулись со сложными конвейерами, могу ли я также порекомендовать (бесстыдное продвижение собственного модуля) IPC::PrettyPipe, который я написал, чтобы помочь отобразить сложные конвейеры.

06.08.2018
Новые материалы

Учебные заметки JavaScript Object Oriented Labs
Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

Разбор строк запроса в vue.js
Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
«Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

Как настроить Selenium в проекте Angular
Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

Аргументы прогрессивного улучшения почти всегда упускают суть
В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

Введение в Джанго Фреймворк
Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..