Ruby的PTY在方法,脚本和IRB / Pry中给出了不同的结果

时间:2018-04-07 03:41:03

标签: ruby pty

我得到2个不同的输出(忽略不重要的东西):

输出1

2.5.0
"Mystery Train\r\n^D\b\b\r\n"
"Mystery Train\r\n^D\b\b\r\n"

输出2

2.5.0
"Mystery Train\r\n^D\b\b\r\n"
"Mystery Train\r\n^D\b\b\r\n2f1675da1e96a41954149a646cf6fb40\r\n"

代码如下,以下是与不同方式运行相对应的结果:

脚本 - 输出1
IRB - 输出2
撬 - 输出2

问题是 - 为什么我在脚本和repl之间以及方法调用之间获得不同的输出?

我在OSX上使用Ruby v2.5.0和md5运行它,在Ubuntu上运行Ruby v2.5.1和md5sum得到几乎相同的结果(任何差异都是因为md5 vs md5sum的输出格式)。

warn RUBY_VERSION # sanity check

MD5 = "md5"
TEXT = "Mystery Train\n\x4"

require 'pty'

def pty!
  master,slave = PTY.open

  pid = spawn(MD5, in: slave, out: slave )
  master.puts TEXT

  begin
    p master.read_nonblock 4096
  rescue Errno::EAGAIN
    IO.select([master])
    retry
  end
ensure
  master.close
  slave.close
end

pty!

puts "----"
# code below is identical but not wrapped in a method


master,slave = PTY.open

pid = spawn(MD5, in: slave, out: slave )
master.puts TEXT

begin
  p master.read_nonblock 4096
rescue Errno::EAGAIN
  IO.select([master])
  retry
end
master.close
slave.close

我尝试使用Process.wait改变执行顺序......,使用管道和slave pty,但我得到了相同的结果。如果使用eval将repl和脚本之间的差异归结为repl,那么为什么该方法在repl中不起作用?

非常感谢任何帮助或见解。

0 个答案:

没有答案