Redirect STDOUT to function?

Hello,
I'm using Ruby as a scripting language for a program that supports the WSH scripting interface, and I have a small problem: 'puts' and other output functions don't work (because STDOUT is invalid), as with 'gets' (but with STDIN). I'd like to redirect all accesses to STDOUT and STDIN to my own functions, which would handle the IO through the main application's scripting interface.
I know that $stdout and others can be reassigned to other IO objects, but I haven't yet found a way to reliably redirect through a function instead. Of course, this is probably because I'm relatively new to Ruby.
Does anyone know how I could do something like this?~Jonathan Castello

···

_________________________________________________________________
Bing brings you health info from trusted sources.
http://www.bing.com/search?q=pet+allergy&form=MHEINA&publ=WLHMTAG&crea=TXT_MHEINA_Health_Health_PetAllergy_1x1

I haven't tried this, but you should be able to create an IO-like
class/object where the methods you care about are (or call) the custom
functions you want to use. It would be nice if there was an module you
could mix into an object that implemented a few of the more basic
function which would build on those to provide the rest of the IO
interface, the way Enumerable builds on an "each" method in the class
its mixed into.

···

On Mon, Sep 21, 2009 at 6:07 PM, Jonathan Castello <solugon@hotmail.com> wrote:

I know that $stdout and others can be reassigned to other IO objects, but I haven't yet found a way to reliably
redirect through a function instead. Of course, this is probably because I'm relatively new to Ruby.
Does anyone know how I could do something like this?~Jonathan Castello

Create a brand new IO object that's backed by the function you want.
(Maybe a thread and a StringIO would do the trick.)

--Ken

···

On Tue, 22 Sep 2009 10:07:16 +0900, Jonathan Castello wrote:

Hello,
I'm using Ruby as a scripting language for a program that supports the
WSH scripting interface, and I have a small problem: 'puts' and other
output functions don't work (because STDOUT is invalid), as with 'gets'
(but with STDIN). I'd like to redirect all accesses to STDOUT and STDIN
to my own functions, which would handle the IO through the main
application's scripting interface. I know that $stdout and others can be
reassigned to other IO objects, but I haven't yet found a way to
reliably redirect through a function instead. Of course, this is
probably because I'm relatively new to Ruby. Does anyone know how I
could do something like this?~Jonathan Castello

--
Chanoch (Ken) Bloom. PhD candidate. Linguistic Cognition Laboratory.
Department of Computer Science. Illinois Institute of Technology.
http://www.iit.edu/~kbloom1/

On the module suggestion, that would definitely be pretty great! Also, I've already considered the IO-like class, and I'm just not sure where to start. I don't know what method(s) puts/p/gets/et cetera depend on, or what the dependencies depend on; it's a fairly difficult problem for a newcomer to Ruby like me.

···

Date: Tue, 22 Sep 2009 10:44:43 +0900
From: cmdicely@gmail.com
Subject: Re: redirect STDOUT to function?
To: ruby-talk@ruby-lang.org

On Mon, Sep 21, 2009 at 6:07 PM, Jonathan Castello <solugon@hotmail.com> wrote:

> I know that $stdout and others can be reassigned to other IO objects, but I haven't yet found a way to reliably
> redirect through a function instead. Of course, this is probably because I'm relatively new to Ruby.
> Does anyone know how I could do something like this?~Jonathan Castello

I haven't tried this, but you should be able to create an IO-like
class/object where the methods you care about are (or call) the custom
functions you want to use. It would be nice if there was an module you
could mix into an object that implemented a few of the more basic
function which would build on those to provide the rest of the IO
interface, the way Enumerable builds on an "each" method in the class
its mixed into.

_________________________________________________________________
Ready for Fall shows? Use Bing to find helpful ratings and reviews on digital tv's.
http://www.bing.com/shopping/search?q=digital+tv’s&form=MSHNCB&publ=WLHMTAG&crea=TEXT_MSHNCB_Vertical_Shopping_DigitalTVs_1x1

Hmm, what do you mean by "backed by the function you want"? My whole problem is that I don't know what function(s) to redefine in order for the object to work reliably. For example, do all of the methods rely on just one to access the data directly, or are there multiple such methods I'd need to account for?

···

Date: Tue, 22 Sep 2009 11:08:42 +0900
From: kbloom@gmail.com
Subject: Re: redirect STDOUT to function?
To: ruby-talk@ruby-lang.org

On Tue, 22 Sep 2009 10:07:16 +0900, Jonathan Castello wrote:

> Hello,
> I'm using Ruby as a scripting language for a program that supports the
> WSH scripting interface, and I have a small problem: 'puts' and other
> output functions don't work (because STDOUT is invalid), as with 'gets'
> (but with STDIN). I'd like to redirect all accesses to STDOUT and STDIN
> to my own functions, which would handle the IO through the main
> application's scripting interface. I know that $stdout and others can be
> reassigned to other IO objects, but I haven't yet found a way to
> reliably redirect through a function instead. Of course, this is
> probably because I'm relatively new to Ruby. Does anyone know how I
> could do something like this?~Jonathan Castello

Create a brand new IO object that's backed by the function you want.
(Maybe a thread and a StringIO would do the trick.)

--Ken

--
Chanoch (Ken) Bloom. PhD candidate. Linguistic Cognition Laboratory.
Department of Computer Science. Illinois Institute of Technology.
http://www.iit.edu/~kbloom1/

_________________________________________________________________
Bing brings you health info from trusted sources.

Why not just override the puts/gets function to your liking?

irb(main):001:0> def puts(str)
irb(main):002:1> :foo
irb(main):003:1> end
=> nil
irb(main):004:0> puts "Hello World"
=> :foo

···

-----Original Message-----
From: Jonathan Castello [mailto:solugon@hotmail.com]
Sent: Monday, September 21, 2009 8:21 PM
To: ruby-talk ML
Subject: Re: redirect STDOUT to function?

Hmm, what do you mean by "backed by the function you want"? My whole
problem is that I don't know what function(s) to redefine in order for
the object to work reliably. For example, do all of the methods rely on
just one to access the data directly, or are there multiple such
methods I'd need to account for?
> Date: Tue, 22 Sep 2009 11:08:42 +0900
> From: kbloom@gmail.com
> Subject: Re: redirect STDOUT to function?
> To: ruby-talk@ruby-lang.org
>
> On Tue, 22 Sep 2009 10:07:16 +0900, Jonathan Castello wrote:
>
> > Hello,
> > I'm using Ruby as a scripting language for a program that supports
the
> > WSH scripting interface, and I have a small problem: 'puts' and
other
> > output functions don't work (because STDOUT is invalid), as with
'gets'
> > (but with STDIN). I'd like to redirect all accesses to STDOUT and
STDIN
> > to my own functions, which would handle the IO through the main
> > application's scripting interface. I know that $stdout and others
can be
> > reassigned to other IO objects, but I haven't yet found a way to
> > reliably redirect through a function instead. Of course, this is
> > probably because I'm relatively new to Ruby. Does anyone know how I
> > could do something like this?~Jonathan Castello
>
> Create a brand new IO object that's backed by the function you want.
> (Maybe a thread and a StringIO would do the trick.)
>
> --Ken
>
> --
> Chanoch (Ken) Bloom. PhD candidate. Linguistic Cognition Laboratory.
> Department of Computer Science. Illinois Institute of Technology.
> http://www.iit.edu/~kbloom1/
>
>

_________________________________________________________________
Bing brings you health info from trusted sources.
pet allergy - Search
TXT_MHEINA_Health_Health_PetAllergy_1x1