Needing to pipe commands to automate program

R

Ruggershawn

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!
 
7

7stud --

Ruggershawn said:
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
 
7

7stud --

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

7stud --

7stud said:
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
 
R

Ruggershawn

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.
 

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,755
Messages
2,569,536
Members
45,007
Latest member
obedient dusk

Latest Threads

Top