# How to read a PIPE in unbuffered way?

**URL:** <https://www.ruby-forum.com/t/how-to-read-a-pipe-in-unbuffered-way/149453>\
**Category:** Ruby\
**Created:** [September 25, 2008, 12:35am UTC](https://www.ruby-forum.com/t/how-to-read-a-pipe-in-unbuffered-way/149453 "2008-09-25T00:35:18Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![ISSSSaki\_Baz\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/51bf81/32.png) [@ISSSSaki\_Baz\_C](https://www.ruby-forum.com/u/ISSSSaki_Baz_C)\
**Post date:** [September 25, 2008, 12:35am UTC](https://www.ruby-forum.com/t/how-to-read-a-pipe-in-unbuffered-way/149453/1 "2008-09-25T00:35:18Z")

</div>

Hi, I’d like to know the Ruby equivalent to the following Perl code:

* * *

open(PIPE,“ngrep dst port 80 |”);  
select(PIPE); $| = 1; # make unbuffered  
select(STDOUT); $| = 1; # make unbuffered

while()  
{  
chomp($\_);  
s/  
//ig;  
s/ // if(/^ /);

#### process and change the captured data before writting to the

## screen #### } close(PIPE);

“ngrep” itself is a Linux command that captures TCP/UDP data and prints  
it to  
the screen. In this case I capture traffic with destination port 80.

I assume I must start with:

f = IO.popen(“ngrep dst port 80”)

but no idea of what to do after that. Any help please? Thanks a lot.

---

<div class="post-metadata">

**Author:** ![ISSSSaki\_Baz\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/51bf81/32.png) [@ISSSSaki\_Baz\_C](https://www.ruby-forum.com/u/ISSSSaki_Baz_C)\
**Post date:** [September 25, 2008, 6:04pm UTC](https://www.ruby-forum.com/t/how-to-read-a-pipe-in-unbuffered-way/149453/2 "2008-09-25T18:04:12Z")

</div>

something like this?

IO.popen(‘ngrep dst port 80’).each do |line|

# PROCESS LINE

end

---

<div class="post-metadata">

**Author:** ![ISSSSaki\_Baz\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/51bf81/32.png) [@ISSSSaki\_Baz\_C](https://www.ruby-forum.com/u/ISSSSaki_Baz_C)\
**Post date:** [September 25, 2008, 7:39pm UTC](https://www.ruby-forum.com/t/how-to-read-a-pipe-in-unbuffered-way/149453/3 "2008-09-25T19:39:30Z")

</div>

On Sep 24, 2008, at 4:33 PM, Iñaki Baz C. wrote:

> ```
> s/
> 
> ```
> 
> the screen. In this case I capture traffic with destination port 80.  
> Iñaki Baz C.

ammunition

require ‘io/nonblock’

[http://codeforpeople.com/lib/ruby/nbfifo/nbfifo-0.0.0/README](http://codeforpeople.com/lib/ruby/nbfifo/nbfifo-0.0.0/README)

a @ [http://codeforpeople.com/](http://codeforpeople.com/)

---

<div class="post-metadata">

**Author:** ![ISSSSaki\_Baz\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/51bf81/32.png) [@ISSSSaki\_Baz\_C](https://www.ruby-forum.com/u/ISSSSaki_Baz_C)\
**Post date:** [September 26, 2008, 12:03am UTC](https://www.ruby-forum.com/t/how-to-read-a-pipe-in-unbuffered-way/149453/4 "2008-09-26T00:03:48Z")

</div>

El Jueves, 25 de Septiembre de 2008, removed\_email\_address@domain.invalid  
escribió:\> something like this?

> IO.popen(‘ngrep dst port 80’).each do |line|
> 
> # PROCESS LINE
> 
> end

Great!  
Thanks a lot.
