我有一个名为Foo
的类,它使用管道输入从命令行读取输入,它运行良好。我有另一个名为Bar
的类,它调用Foo
,并且必须以Foo
期望的相同方式提供(管道输入)Foo
,但它似乎不是为我工作。
请参阅下面的我的代码段。 我将不胜感激任何帮助。
注意:
我知道我可以通过将对象数据从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:
做错了什么,为什么?解决方案会很棒。
答案 0 :(得分:0)
我发现了我的错误。我修改Foo
如下,但我打破了它的功能。
$ cat foo.rb
# foo.rb
class Foo
def self.print
@@stdin = STDIN.tty? ? nil : $stdin.read #ok for cli pipe-in
puts "stdin: #{@@stdin}"
end
end
$ echo "piped" | ruby test.rb
stdin: bar