On Dec 1, 2:52 am, MonkeeSage <MonkeeS... / gmail.com> wrote: > On Dec 1, 2:41 am, MonkeeSage <MonkeeS... / gmail.com> wrote: > > > > > On Nov 30, 7:56 pm, Trey <treyb... / gmail.com> wrote: > > > > I'm in need of running a system command as another user than the user > > > that is executing the ruby script. Is this possible? Can I execute > > > su (and somehow supply the correct password), then run the command? > > > Here is a naive version using the built-in pty extension (*nix only, > > but since you mention su, I assume that's not a problem)... > > > require "pty" > > require "expect" > > > cmd = "sleep 1; sudo -u someuser ls 2>&1" > > PTY.spawn(cmd) { | stdin, stdout, pid | > > stdin.expect(/Password:|/) { | result, pass | > > stdout.write("secret_password\n") if pass > > } > > puts stdin.read > > > } > > > Regardsm > > Jordan > > Oops... > > > stdout.write("secret_password\n") if pass > > stdout.write("secret_password\n") if pass == "Password:" Good grief. Third time's a charm (maybe)... require "pty" require "expect" PTY.spawn("sleep 1; sudo -u root ls 2>&1") { | stdin, stdout, pid | begin stdin.expect("Password:") { stdout.write("secret_password\n") puts stdin.read.lstrip } rescue Errno::EIO # don't care end } Sorry about that! Was confusing live code with the version I meant to post (twice!). I was trying to do fancy stuff and detect when the password was catched already by sudo, but never got that working. Regards, Jordan