从 ARGF 获取文件输入和 STDIN?

Getting both File input AND STDIN from ARGF?

我正在使用 shoes 库来 运行 一段 ruby 代码,并且发现它将 ruby 代码 运行ning 作为文件输入,因此不允许我再获取 STDIN(因为 ARGF 允许文件输入或 STDIN 但显然不能同时输入)。

有没有办法覆盖这个?例如,我听说 perl 允许您在 IO 缓冲区为空时从 STDIN 读取。

编辑:

我在“-”特殊文件名字符方面取得了一些成功,这显然是在命令行上切换到 STDIN 的信号。

上一题形式:鞋子ARGF坏了吗?

使用通用 Ruby,我可以使用 ARGF 读取文件或标准输入。使用 Shoes,我只能读取文件。标准中的任何内容都会被忽略。是进食标准,还是有其他获取方式?

示例代码行:要么单独存在于 ruby 文件中,要么位于鞋子中的鞋子应用程序中。

#ruby testargf.rb aus.txt is the same as ruby testargf.rb<aus.txt
#but isn't in shoes. shoes only prints with the first input, not the second
ARGF.each do |line|  #readLine.each has same result
  puts line
end

或鞋子:

#shoes testargfshoes.rb aus.txt should be the same as <aus.txt but isn't.
Shoes.app(title: "File I/0 test",width:800,height:650)  do
    ARGF.each do |line|  #readLine.each has same result
        puts line
        para line
    end
end

回想起来,我确实还看到了 Shoes 和 Ruby 之间的进一步区别:Shoes 还打印出我正在 运行ning 的程序的源代码,以及我传递的任何文件.如果我尝试将文件输入标准输入,则只会打印源代码。

我想这意味着鞋子应用程序将我的程序作为输入,然后在将输入传递给我的代码时不对输入进行清理(或任何正确的词)。这似乎加强了我的 "Shoes eats Standard In" 假设,因为它显然是在使用标准 In 来做某事。我想它可以连续使用两个文件,但不能是一个文件,然后是对标准的引用。

我可以确认 Ruby 如果我将文件输入和 STDIN 与以下内容混合使用,则不带鞋子的 Ruby 会提供相同的行为:

ruby testargf.rb  aus_simple.txt < testargf.rb

我在“-”特殊文件名字符方面取得了一些成功,这显然是在命令行上切换到 STDIN 的信号。

使用示例:

shoes testargfshoes.rb -   <aus_simple.txt

不通过任何标准In,不要通过“-”,使其挂起。

在这里找到答案:https://robots.thoughtbot.com/rubys-argf