Ruby 如何使Open4以交互方式捕获所有标准输出?

Ruby 如何使Open4以交互方式捕获所有标准输出?,ruby,open4,Ruby,Open4,我试图在Ruby脚本中执行一个shell命令。有问题的shell命令pg_dump提示用户输入密码。我想做的是在子进程中执行shell命令,并让父进程以交互方式输入密码 我希望所有的stdout和stderr都被父进程捕获,这样它就不会显示给用户 这里有一些代码。它所要展示的只是Open4能够从shell命令捕获stdout。不幸的是,它没有这样做 puts "Executing \"#{pg_dump_command}\"" stdin = '' stdout = '' stderr = '

我试图在Ruby脚本中执行一个shell命令。有问题的shell命令pg_dump提示用户输入密码。我想做的是在子进程中执行shell命令,并让父进程以交互方式输入密码

我希望所有的stdout和stderr都被父进程捕获,这样它就不会显示给用户

这里有一些代码。它所要展示的只是Open4能够从shell命令捕获stdout。不幸的是,它没有这样做

puts "Executing \"#{pg_dump_command}\""

stdin = ''
stdout = ''
stderr = ''

thread = Open4::background(pg_dump_command, 0 => stdin, 1 => stdout, 2 => stderr)

while(status = thread.status)
  puts '.'

  sleep 1
end

puts "STDOUT: #{stdout}"
puts "STDERR: #{stderr}"
这是输出。请注意,它打印Password:,尽管Open4被传递了一个字符串作为stdout

我错过了什么?谢谢你的帮助

Executing "pg_dump -U myuser -Fc mydb > /tmp/db.dump"
.
Password: .
.
(the dots continue for as long as a password is not entered)
STDOUT: 
STDERR: pg_dump: [archiver (db)] connection to database "mydb" failed: FATAL:  password authentication failed for user "myuser"