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

K

Kga Agk

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.
 
R

Rick DeNatale

B

Brian Candler

Rick said:
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.
 
K

Kga Agk

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 ?
 
K

Kga Agk

Kga said:
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
 
K

Kga Agk

Kga said:
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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,578
Members
45,052
Latest member
LucyCarper

Latest Threads

Top