从ARGF获取文件输入和STDIN?

时间:2017-02-15 15:26:14

标签: ruby stdin shoes

我正在使用鞋库运行一段ruby代码并发现它将它作为文件输入运行的ruby代码处理,因此不允许我再获取STDIN(因为ARGF允许文件)输入OR STDIN,但显然不是两者兼而有之。)

无论如何都要覆盖这个?我告诉perl,例如,一旦IO缓冲区为空,就允许你从STDIN读取。

编辑:

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

以前的问题形式:鞋子ARGF是否破损?

使用常规Ruby,我可以使用ARGF读取文件或标准输入。有了Shoes,我只能读取文件。刚刚标准的任何内容都会被忽略。它是否符合标准,或者是否有其他方式可以访问它?

示例代码行:可以单独存放在ruby文件中,也可以单独存放在鞋子中的Shoes应用程序中。

#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还打印出我正在运行的程序的源代码,以及我传递的任何文件。如果我尝试输入标准文件,只打印源代码。

我想这意味着鞋子应用程序将我的程序作为输入,然后在将输入传递给我的代码时不进行消毒(或任何正确的单词)输入。这似乎加强了我的&#34; Shoes eats Standard In&#34;假设,因为它显然是使用标准的In。我想它可以连续两个文件,但不是一个文件,然后是标准的参考。

如果我将文件输入和STDIN与:

混合,我可以确认Ruby without Shoes提供相同的行为
ruby testargf.rb  aus_simple.txt < testargf.rb

1 个答案:

答案 0 :(得分:0)

我在&#34; - &#34;取得了一些成功。特殊文件名字符,显然是在命令行上切换到STDIN的信号。

使用示例:

shoes testargfshoes.rb -   <aus_simple.txt

不要通过&#34; - &#34;没有通过任何标准的In,让它挂起。

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