Needing to pipe commands to automate program

Hello,

I am fairly new in the ruby language. I have a ruby program that
needs to be automated. Every time I run this program you have to
manually type in the questions.

Examples: Are you using 32/64 bit?
                  Enter the path where you wish to install?

What I am trying to find a way where I can create a script to pipe the
answers from a flat file so this can be done automatically.

Anyone have any ideas?

Thanks!

Ruggershawn wrote:

Hello,

I am fairly new in the ruby language. I have a ruby program that
needs to be automated. Every time I run this program you have to
manually type in the questions.

Examples: Are you using 32/64 bit?
                  Enter the path where you wish to install?

What I am trying to find a way where I can create a script to pipe the
answers from a flat file so this can be done automatically.

Anyone have any ideas?

Thanks!

#original program: r1test.rb

puts "Enter 32 or 64 bit:"
STDOUT.flush
answer1 = gets.strip.chomp

puts "Enter the path where you wish to install:"
STDOUT.flush
answer2 = gets.strip.chomp

puts "Your answers were:"
puts answer1
puts answer2
STDOUT.flush

···

----------

#driver program: r2test.rb

pipe = IO.popen("ruby r1test.rb", "w+")

f = File.open("answers.txt")

pipe.gets #Enter 32 or 64 bit:
pipe.puts(f.gets.chomp)

pipe.gets #Enter the path:
pipe.puts(f.gets.chomp)

puts pipe.gets, pipe.gets, pipe.gets

puts
puts "Hit enter to end program"
gets

----------------

$ ruby r2test.rb
Your answers were:
32
./test_programs

Hit enter to end program
--
Posted via http://www.ruby-forum.com/\.

Ruggershawn wrote:

Hello,

I am fairly new in the ruby language. I have a ruby program that
needs to be automated. Every time I run this program you have to
manually type in the questions.

Examples: Are you using 32/64 bit?
                  Enter the path where you wish to install?

What I am trying to find a way where I can create a script to pipe the
answers from a flat file so this can be done automatically.

Anyone have any ideas?

Thanks!

This works too:

#original program: r1test.rb

puts "Enter 32 or 64 bit:"
answer1 = gets.strip.chomp

puts "Enter the path where you wish to install:"
answer2 = gets.strip.chomp

File.open('output.txt', 'w') do |f|
  f.puts("Your answers were:")
  f.puts answer1
  f.puts answer2
end

Just be aware that popen() hijacks stdin and stdout in the original
program--directing the original program's input and output to the IO
object created in the driver program. If your original program writes
some results to a file, then that won't be an issue.

···

--
Posted via http://www.ruby-forum.com/\.

7stud -- wrote:

This works too:

#original program: r1test.rb

puts "Enter 32 or 64 bit:"
answer1 = gets.strip.chomp

puts "Enter the path where you wish to install:"
answer2 = gets.strip.chomp

File.open('output.txt', 'w') do |f|
  f.puts("Your answers were:")
  f.puts answer1
  f.puts answer2
end

Just be aware that popen() hijacks stdin and stdout in the original
program--directing the original program's input and output to the IO
object created in the driver program. If your original program writes
some results to a file, then that won't be an issue.

Whoops. Here's the driver program:

#driver program:

pipe = IO.popen("ruby r1test.rb", "w+")
f = File.open("data.txt")

pipe.puts(f.gets.chomp)
pipe.puts(f.gets.chomp)

puts
puts "Hit enter to end program"
gets

···

--
Posted via http://www.ruby-forum.com/\.

Hey Thanks for the reply! It worked great!

Now I am wondering how to output the standard out to the screen? Right
now I run my ruby program and cant see anything being logged.

···

On May 19, 1:27 am, 7stud -- <bbxx789_0...@yahoo.com> wrote:

7stud -- wrote:
> This works too:

> #original program: r1test.rb

> puts "Enter 32 or 64 bit:"
> answer1 = gets.strip.chomp

> puts "Enter the path where you wish to install:"
> answer2 = gets.strip.chomp

> File.open('output.txt', 'w') do |f|
> f.puts("Your answers were:")
> f.puts answer1
> f.puts answer2
> end

> Just be aware that popen() hijacks stdin and stdout in the original
> program--directing the original program's input and output to the IO
> object created in the driver program. If your original program writes
> some results to a file, then that won't be an issue.

Whoops. Here's the driver program:

#driver program:

pipe= IO.popen("ruby r1test.rb", "w+")
f = File.open("data.txt")

pipe.puts(f.gets.chomp)pipe.puts(f.gets.chomp)

puts
puts "Hit enter to end program"
gets

--
Posted viahttp://www.ruby-forum.com/.