使用ARGF测试管道或控制台标准输入

时间:2015-02-20 13:17:22

标签: ruby input command-line-arguments

我编写了一个脚本,我想通过管道或提供文件名作为参数来输入。 ARGF可以很容易地灵活处理这个问题,除了在都没有提供的错误使用情况下,在这种情况下STDIN被打开并且它会挂起,直到用户在控制台上输入内容为止。

我想抓住这个不正确的用法来显示错误信息并退出程序,但我找不到办法。 ARGF.eof?似乎是一个可能的候选人,但在收到一些意见之前它也会挂起。

Ruby是否有一种简单的方法可以区分管道提供的STDIN和控制台提供的STDIN?

1 个答案:

答案 0 :(得分:1)

你可以使用

$stdin.tty?

例如

$ ruby -e 'puts $stdin.tty?'
> true
$ echo "hello" |  ruby -e 'puts $stdin.tty?'
> false