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.
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.
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?
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
···
On Nov 18, 2007, at 12:45 AM, kazaam wrote:
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?
--
kazaam <kazaam@oleco.net>
---
gets: 42
---
status: 0
a @ http://codeforpeople.com/
--
we can deny everything, except that we have the possibility of being better. simply reflect on that.
h.h. the 14th dalai lama