Executing another cmdl-app with ruby and typing in a password?

Hi,
I’m writing a gui with ruby and glade and so far it works well. Now the
program I write a gui for has an option which wants you to type a
password in the console. I start it this way:
system(“anotherapp --encrypt”)
then in the commandline happens something until it gets printed:
Password:
And it wants me to type in a password. I want to send this password from
my gui to the cmdlline. But how can I get the Password in it? I tried to
pipe it with:
system(“echo ‘pwd’ | anotherapp --encrypt”)
but this doesn’t work at all.

Any idea how to do this?

greets

On Nov 17, 2007, at 11:25 AM, kazaam wrote:

Any idea how to do this?

this has nothing to do with ruby per se: the program requires a pty,
the ruby distribution has examples, including an ‘expect’ based
example, in ext/pty/expect_sample.rb.

a @ http://codeforpeople.com/

Thanks for pointing me in the right direction. I now wrote a little loop
to do this work:

require ‘pty’
require ‘expect’

PTY.spawn(“ruby test.rb”) do |read_t,write_t,pid|
write_t.sync = true
read_t.expect(/^enter passphrase.*/) {write_t.print “123456”}
end

But I have a problem. How to find out if the spawned process executed
with or without errors? I mean in this example “ruby test.rb”. If I use
system I could do:
puts “error” if not system(“ruby test.rb”)

But PTY.spawn always just returns ‘nil’. Is there any way I can check
for correct execution?

On Nov 18, 2007, at 12:45 AM, kazaam wrote:

kazaam [email protected]
cfp:~ > cat a.rb
require “yaml”
require “pty”

module PTY
def self.execute *a, &b
begin
spawn *a, &b
0
rescue => e
e.status rescue raise
end
end
end

status =
PTY.execute “ruby” do |r,w,pid|
w.sync = true
w.puts “42”
y ‘gets’ => r.gets.strip.to_i
end
y ‘status’ => status

cfp:~ > ruby a.rb

gets: 42

status: 0

a @ http://codeforpeople.com/