【发布时间】:2013-10-14 06:47:52
【问题描述】:
出于测试目的,我正在尝试打开一个 Ruby 脚本,提示输入带有 popen3 的内容。
我需要能够输入进程的 STDIN 并检查输出。到目前为止,我有这个:
require 'open3'
def run(executable, opts = {})
Signal.trap('CLD') do
puts 'STDIN:', @stdout.readlines
# @stderr.rewind
puts 'STDERR:', @stderr.readlines
# got EOF, trying to rewind gives me 'Errno::ESPIPE: Illegal seek'
[@stdin, @stdout, @stderr].each &:close
end
@stdin, @stdout, @stderr, @thread = Open3.popen3(executable)
@status = @thread.value
end
已经尝试了几天,我的大脑正在融化。
【问题讨论】:
-
我建议您仅将其作为最后的努力 - 如果可能,请使用您的软件正在使用的同一库而不是午餐其他进程并尝试处理它。
-
是的,事实证明这真的很难(而且很耗时)。但是,如果可以的话,我会回答。
-
readlines "blocks" 直到它读取所有输入,所以......可能使用其他东西......