I see that it works, but I don't find any of the documentation that makes sense.
So -- it seems to be IO class, but how? There's no IO declaration there.
Also, I can't find anything that says you can open a command with a preceding pipe and get the output of the executed command.
I'm familiar with perls open: open(FH, "hostname |") with a suffixed pipe -- which is consistent with unix pipe usage.
But can someone explain to me what's going on here so my brain doesn't implode?
On 10/5/06, Tom Allison <tallison@tacocat.net> wrote:
Found a buddy who used something like:
hostname = open("|hostname").gets
And...
I see that it works, but I don't find any of the documentation that makes sense.
So -- it seems to be IO class, but how? There's no IO declaration there.
Also, I can't find anything that says you can open a command with a preceding
pipe and get the output of the executed command.
I'm familiar with perls open: open(FH, "hostname |") with a suffixed pipe --
which is consistent with unix pipe usage.
But can someone explain to me what's going on here so my brain doesn't implode?
On 10/5/06, Tom Allison <tallison@tacocat.net> wrote:
Found a buddy who used something like:
hostname = open("|hostname").gets
And...
I see that it works, but I don't find any of the documentation that makes sense.
So -- it seems to be IO class, but how? There's no IO declaration there.
Also, I can't find anything that says you can open a command with a preceding
pipe and get the output of the executed command.
I'm familiar with perls open: open(FH, "hostname |") with a suffixed pipe --
which is consistent with unix pipe usage.
But can someone explain to me what's going on here so my brain doesn't implode?
What's with the pipe being at the wrong end?
What's the thinking behind that?
You can find a short description in ri or the Pickaxe:
C:\tmp>ri IO
-------------------------------------------------------------- Class: IO
Class +IO+ is the basis for all input and output in Ruby. An I/O
stream may be _duplexed_ (that is, bidirectional), and so may use
more than one native operating system stream.
Many of the examples in this section use class +File+, the only
standard subclass of +IO+. The two classes are closely associated.
As used in this section, _portname_ may take any of the following
forms.
* A plain string represents a filename suitable for the
underlying operating system.
>>>>>
* A string starting with ``+|+'' indicates a subprocess. The
remainder of the string following the ``+|+'' is invoked as a
process with appropriate input/output channels connected to it.
>>>>>
* A string equal to ``+|-+'' will create another Ruby instance as
a subprocess.