I am running into an issue where I have a script that takes two command line arguments and reads from stdin. It seems that gets is not getting to stdin because it is hitting ARGV first (http://www.ruby-doc.org/core/classes/Kernel.html#M005996). Is there a way around this so that I can pass in arguments and listen on stdin as well. Running the script without args works perfectly. What I am doing currently looks something like the following:
At Sat, 25 Apr 2009 07:43:28 +0900,
Joe Williams wrote in [ruby-talk:334959]:
I am running into an issue where I have a script that takes two command
line arguments and reads from stdin. It seems that gets is not getting
to stdin because it is hitting ARGV first
I am running into an issue where I have a script that takes two command line arguments and reads from stdin. It seems that gets is not getting to stdin because it is hitting ARGV first (module Kernel - RDoc Documentation). Is there a way around this so that I can pass in arguments and listen on stdin as well. Running the script without args works perfectly. What I am doing currently looks something like the following:
var1 = ARGV[0]
var2 = ARGV[1]
var3 = gets
Any advice would be helpful.
Thanks.
-Joe
Kernel#gets reads from ARGF, which, if there's anything in ARGV, is read from those files. So you can clear from ARGV first, if you want the option of passing your file as the 3rd arg instead of stdin.
$ cat data
this is some text
$ ruby tt.rb foo bar data
["foo", "bar", "this is some text\n"]
$ ruby tt.rb foo bar
type some input
["foo", "bar", "type some input\n"]
···
--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407
ARGV.shift works perfectly, should have thought of that.
Thanks!
-Joe
Joel VanderWerf wrote:
···
Joe Williams wrote:
I am running into an issue where I have a script that takes two command line arguments and reads from stdin. It seems that gets is not getting to stdin because it is hitting ARGV first (module Kernel - RDoc Documentation). Is there a way around this so that I can pass in arguments and listen on stdin as well. Running the script without args works perfectly. What I am doing currently looks something like the following:
var1 = ARGV[0]
var2 = ARGV[1]
var3 = gets
Any advice would be helpful.
Thanks.
-Joe
Kernel#gets reads from ARGF, which, if there's anything in ARGV, is read from those files. So you can clear from ARGV first, if you want the option of passing your file as the 3rd arg instead of stdin.
$ cat data
this is some text
$ ruby tt.rb foo bar data
["foo", "bar", "this is some text\n"]
$ ruby tt.rb foo bar
type some input
["foo", "bar", "type some input\n"]
At Sat, 25 Apr 2009 07:43:28 +0900,
Joe Williams wrote in [ruby-talk:334959]:
I am running into an issue where I have a script that takes two command
line arguments and reads from stdin. It seems that gets is not getting
to stdin because it is hitting ARGV first
Kernel#gets is not a method to read from stdin.
Use $stdin.gets.
Thanks Nobuyoshi!
I used $stdin.gets. instead of gets. and that solved the problem I was
facing!
At Sat, 25 Apr 2009 07:43:28 +0900,
Joe Williams wrote in [ruby-talk:334959]:
I am running into an issue where I have a script that takes two command
line arguments and reads from stdin. It seems that gets is not getting
to stdin because it is hitting ARGV first
Kernel#gets is not a method to read from stdin.
Use $stdin.gets.
Thanks Nobuyoshi!
I used $stdin.gets. instead of gets. and that solved the problem I was
facing!
gets # reads stdin or from file if there are more arguments
If there is a need for more complex argument processing I would use
OptionParser anyway.
OptionParser.new do |opts|
...
end.parse! ARGV # removes options
Kind regards
robert
···
On Wed, May 25, 2011 at 7:05 AM, Daniel C. <daniel_antonio_n@yahoo.com> wrote:
Prakash Murthy wrote in post #929972:
Nobuyoshi Nakada wrote:
Hi,
At Sat, 25 Apr 2009 07:43:28 +0900,
Joe Williams wrote in [ruby-talk:334959]:
I am running into an issue where I have a script that takes two command
line arguments and reads from stdin. It seems that gets is not getting
to stdin because it is hitting ARGV first
Kernel#gets is not a method to read from stdin.
Use $stdin.gets.
Thanks Nobuyoshi!
I used $stdin.gets. instead of gets. and that solved the problem I was
facing!