Redirect gets to get input from a file insted of from the us

I have this small program, or something like it as this just bigger:

test.rb

def testing

t = gets
puts t

k = gets
puts k

end

test2.rb

testing

When I run test2.rb it asks for user input. But I want the program to
get this input from a file instead of asking the user. And I do not want
to change the code in test.rb. I can only change the code in test2.rb or
make new files, but I cant change test.rb

I only now how to do this by running the program from the console

ruby test2.rb < input.txt

But that is not what I want. I want to do this inside the program. I do
not want the user to start it in the console like that. I want the user
only to start the program an th program get the input from the file (or
a text string in the program code) it self.

I am new to ruby, and new to this kind of programming, so please don’t
kill me if it is a stupid question.

On Sat, Jun 6, 2009 at 7:57 AM, Kga A.[email protected] wrote:

test2.rb

testing

This works:

def testing
t = gets
puts t

k = gets
puts k

end

require ‘stringio’

$stdin = StringIO.new(“abc\ndef\n”)

testing

Of course you’d want to set $stdin to the open file.


Rick DeNatale

Blog: http://talklikeaduck.denhaven2.com/
Twitter: http://twitter.com/RickDeNatale
WWR: http://www.workingwithrails.com/person/9021-rick-denatale
LinkedIn: http://www.linkedin.com/in/rickdenatale

I have testet it om some programms, and it gets most outputs. But thee
is some output to the console i havent managed to catch. Might it be a
non standard output? How do i catch it? Is thee som way to catch
everything that are written to det consol, and not only the standard
output ?

Kga A. wrote:

I have testet it om some programms, and it gets most outputs. But thee
is some output to the console i havent managed to catch. Might it be a
non standard output? How do i catch it? Is thee som way to catch
everything that are written to det consol, and not only the standard
output ?

Ops, i asked for input earlier. But now i’m after output. I want to
collect all kind of outputs that the program send to the commandline. I
now how to catch most of it by using somthing simmilar to the
description above, only with $stdout insted. But it dont catch
everything. There is some outputs to the command line it dont catch. I
dont now what kind of output it is, but it is a error message and
printet in red in eclipse

Rick Denatale wrote:

On Sat, Jun 6, 2009 at 7:57 AM, Kga A.[email protected] wrote:

test2.rb

testing

This works:

def testing
t = gets
puts t

k = gets
puts k

end

require ‘stringio’

$stdin = StringIO.new(“abc\ndef\n”)

testing

Of course you’d want to set $stdin to the open file.

A bit of care is needed, because if the program is given command-line
arguments, Kernel#gets will read from the files listed on the
command-line (in the same way as ARGF.gets, I believe)

If test.rb really wants to read from stdin, it should do

$stdin.gets

Of course, you already said you couldn’t modify test.rb. So perhaps you
need to do ARGV.clear or something like that.

Kga A. wrote:

Kga A. wrote:

I have testet it om some programms, and it gets most outputs. But thee
is some output to the console i havent managed to catch. Might it be a
non standard output? How do i catch it? Is thee som way to catch
everything that are written to det consol, and not only the standard
output ?

Ops, i asked for input earlier. But now i’m after output. I want to
collect all kind of outputs that the program send to the commandline. I
now how to catch most of it by using somthing simmilar to the
description above, only with $stdout insted. But it dont catch
everything. There is some outputs to the command line it dont catch. I
dont now what kind of output it is, but it is a error message and
printet in red in eclipse

Hehe, i’m a clutterhead. It was just an stderr output.