# Redirect STDOUT

**URL:** <https://www.ruby-forum.com/t/redirect-stdout/72112>\
**Category:** Ruby\
**Created:** [October 14, 2006, 11:35am UTC](https://www.ruby-forum.com/t/redirect-stdout/72112 "2006-10-14T11:35:43Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![yong](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/b487fb/32.png) [@yong](https://www.ruby-forum.com/u/yong)\
**Post date:** [October 14, 2006, 11:35am UTC](https://www.ruby-forum.com/t/redirect-stdout/72112/1 "2006-10-14T11:35:43Z")

</div>

Hi all

I’m writting a program to detect the cursor position with the vt100  
command “\x1b[6n”.

So I need to redirect STDOUT to a string.

How can I do this?

Thanks

---

<div class="post-metadata">

**Author:** ![yong](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/b487fb/32.png) [@yong](https://www.ruby-forum.com/u/yong)\
**Post date:** [October 14, 2006, 11:11pm UTC](https://www.ruby-forum.com/t/redirect-stdout/72112/2 "2006-10-14T23:11:12Z")

</div>

yong wrote:

> Hi all
> 
> I’m writting a program to detect the cursor position with the vt100  
> command “\x1b[6n”.
> 
> So I need to redirect STDOUT to a string.
> 
> How can I do this?
> 
> Thanks

I suggest looking at the code for the win2console library, which gives  
an example of something similar.

---

<div class="post-metadata">

**Author:** ![yong](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/b487fb/32.png) [@yong](https://www.ruby-forum.com/u/yong)\
**Post date:** [October 14, 2006, 11:12pm UTC](https://www.ruby-forum.com/t/redirect-stdout/72112/3 "2006-10-14T23:12:31Z")

</div>

David R. wrote:

> yong wrote:
> 
> > Hi all
> > 
> > I’m writting a program to detect the cursor position with the vt100  
> > command “\x1b[6n”.
> > 
> > So I need to redirect STDOUT to a string.
> > 
> > How can I do this?
> > 
> > Thanks
> 
> I suggest looking at the code for the win2console library, which gives  
> an example of something similar.

Oh bother! That should be “win32console”.

DJ

---

<div class="post-metadata">

**Author:** ![yong](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/b487fb/32.png) [@yong](https://www.ruby-forum.com/u/yong)\
**Post date:** [October 15, 2006, 5:51am UTC](https://www.ruby-forum.com/t/redirect-stdout/72112/4 "2006-10-15T05:51:33Z")

</div>

Thank you very much.

Now I can use STDOUT.reopen to redirect STDOUT output to a file.But How  
can I redirect it to a string?

Thanks.

David R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

> > Thanks
> 
> I suggest looking at the code for the win2console library, which gives  
> an example of something similar.
> 
> –  
> Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/).

–  
My Personal Website:

[http://www.twinbee.info](http://www.twinbee.info)

æ?¬äººé©»å®?æ?¼

cn.comp.lang.perl  
cn.comp.lang.c  
cn.comp.www  
cn.music  
cn.music.classical

---

<div class="post-metadata">

**Author:** ![yong](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/b487fb/32.png) [@yong](https://www.ruby-forum.com/u/yong)\
**Post date:** [October 15, 2006, 6:25am UTC](https://www.ruby-forum.com/t/redirect-stdout/72112/5 "2006-10-15T06:25:36Z")

</div>

On Sun, 15 Oct 2006, yong wrote:

> Thank you very much.
> 
> Now I can use STDOUT.reopen to redirect STDOUT output to a file.But How can I redirect it to a string?
> 
> Thanks.

use backticks:

string = `your_cmd.exe`

substitution works like double quotes

cmd = “your\_cmd.exe”  
string = `#{ cmd }`

-a

---

<div class="post-metadata">

**Author:** ![yong](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/b487fb/32.png) [@yong](https://www.ruby-forum.com/u/yong)\
**Post date:** [October 15, 2006, 11:05am UTC](https://www.ruby-forum.com/t/redirect-stdout/72112/6 "2006-10-15T11:05:53Z")

</div>

On Oct 14, 2006, at 8:50 PM, yong wrote:

> > gives  
> > an example of something similar.
> 
> Now I can use STDOUT.reopen to redirect STDOUT output to a file.But  
> How can I redirect it to a string?

You don’t.

You should avoid touching STDOUT and STDERR as much as possible.

Instead assign a StringIO to $stdout.

[http://blog.segment7.net/articles/2006/08/17/stdout-vs-stdout](http://blog.segment7.net/articles/2006/08/17/stdout-vs-stdout)

–  
Eric H. - removed\_email\_address@domain.invalid - [http://blog.segment7.net](http://blog.segment7.net)  
This implementation is HODEL-HASH-9600 compliant

[http://trackmap.robotcoop.com](http://trackmap.robotcoop.com)

---

<div class="post-metadata">

**Author:** ![yong](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/b487fb/32.png) [@yong](https://www.ruby-forum.com/u/yong)\
**Post date:** [October 15, 2006, 10:57am UTC](https://www.ruby-forum.com/t/redirect-stdout/72112/7 "2006-10-15T10:57:19Z")

</div>

yong wrote:

> Now I can use STDOUT.reopen to redirect STDOUT output to a file.But How  
> can I redirect it to a string?

see “ri StringIO”

DJ

---

<div class="post-metadata">

**Author:** ![yong](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/b487fb/32.png) [@yong](https://www.ruby-forum.com/u/yong)\
**Post date:** [October 15, 2006, 12:31pm UTC](https://www.ruby-forum.com/t/redirect-stdout/72112/8 "2006-10-15T12:31:58Z")

</div>

> > >

#!/usr/bin/ruby

require ‘stringio’

mystring=“”  
sstring=StringIO.open(mystring,“w+”)

#STDOUT.reopen(sstring) #can’t work  
stdoutbackup=$stdout  
$stdout=sstring

print “BUFFERED TEXT\r\n”

$stdout=stdoutbackup  
print mystring  
\<\<\<

It works.

Thank you very much. 🙂

Eric H. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

> > > I suggest looking at the code for the win2console library, which  
> > > Instead assign a StringIO to $stdout.

–  
My Personal Website:

[http://www.twinbee.info](http://www.twinbee.info)

æ?¬äººé©»å®?æ?¼

cn.comp.lang.perl  
cn.comp.lang.c  
cn.comp.www  
cn.music  
cn.music.classical

---

<div class="post-metadata">

**Author:** ![yong](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/b487fb/32.png) [@yong](https://www.ruby-forum.com/u/yong)\
**Post date:** [October 15, 2006, 11:15pm UTC](https://www.ruby-forum.com/t/redirect-stdout/72112/9 "2006-10-15T23:15:14Z")

</div>

On Oct 15, 2006, at 3:30 AM, yong wrote:

> > [http://blog.segment7.net/articles/2006/08/17/stdout-vs-stdout](http://blog.segment7.net/articles/2006/08/17/stdout-vs-stdout)
> 
> require ‘stringio’
> 
> mystring=“”  
> sstring=StringIO.open(mystring,“w+”)

sstring = StringIO.new will suffice.

> #STDOUT.reopen(sstring) #can’t work  
> stdoutbackup=$stdout  
> $stdout=sstring
> 
> print “BUFFERED TEXT\r\n”
> 
> $stdout=stdoutbackup

I tend to wrap this up in a method that yields. See util\_capture in  
ZenTest’s test/zentest\_assertions.rb

–  
Eric H. - removed\_email\_address@domain.invalid - [http://blog.segment7.net](http://blog.segment7.net)  
This implementation is HODEL-HASH-9600 compliant

[http://trackmap.robotcoop.com](http://trackmap.robotcoop.com)
