【发布时间】:2014-11-25 14:34:40
【问题描述】:
我有一个名为Foo 的类,它使用管道从命令行读取输入,并且运行良好。我有另一个名为Bar 的类,它调用Foo,并且必须以Foo 期望的相同方式输入(管道输入)Foo,但它似乎对我不起作用。
请参阅下面的我的 sn-p。 我将不胜感激。
注意:
我知道我可以通过将对象数据从Bar 传递到Foo 来避免这样做,但我想使用管道。
$ ls -x1
bar.rb
foo.rb
test.rb
$ cat *
# bar.rb
require "stringio"
class Bar
def self.pipe
input = StringIO.new
input.write "bar"
input.rewind
$stdin = input
Foo.print
$stdin = STDIN
end
end
# foo.rb
class Foo
@@stdin = STDIN.tty? ? nil : $stdin.read #ok for cli pipe-in
def self.print
puts "stdin: #{@@stdin}"
end
end
# test.rb
$:.unshift File.join(File.dirname(__FILE__))
require "foo"
require "bar"
Bar.pipe
$ echo "piped" | ruby test.rb
stdin: piped
$ ruby test.rb
stdin:
做错了什么,为什么?一个解决方案会很棒。
【问题讨论】: