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

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
88d805476874d0987c227815ad81347e?d=identicon&s=25 Kga Agk (kga85)
on 2009-06-06 13:57
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.
8f6f95c4bd64d5f10dfddfdcd03c19d6?d=identicon&s=25 Rick Denatale (rdenatale)
on 2009-06-06 14:14
(Received via mailing list)
On Sat, Jun 6, 2009 at 7:57 AM, Kga Agk<lord_kga@yahoo.no> 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
753dcb78b3a3651127665da4bed3c782?d=identicon&s=25 Brian Candler (candlerb)
on 2009-06-06 18:59
Rick Denatale wrote:
> On Sat, Jun 6, 2009 at 7:57 AM, Kga Agk<lord_kga@yahoo.no> 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.
88d805476874d0987c227815ad81347e?d=identicon&s=25 Kga Agk (kga85)
on 2009-06-09 11:32
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 ?
88d805476874d0987c227815ad81347e?d=identicon&s=25 Kga Agk (kga85)
on 2009-06-09 12:28
Kga Agk 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
88d805476874d0987c227815ad81347e?d=identicon&s=25 Kga Agk (kga85)
on 2009-06-09 13:55
Kga Agk wrote:
> Kga Agk 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.
This topic is locked and can not be replied to.