Я использую gets
приостанавливать вывод моего сценария, пока пользователь не поражает клавишу Enter. Если я не передаю аргументов своему сценарию тогда, он хорошо работает. Однако, если я передаю какие-либо аргументы своему сценарию, тогда добирается, умирает со следующей ошибкой:
ruby main.rb -i
main.rb:74:in `gets': No such file or directory - -i (Errno::ENOENT)
from main.rb:74:in `gets'
...
Сообщение об ошибке показывает аргумент, который я передал сценарию. Почему был бы добираться посмотреть на ARGV?
Я использую OptionParser для парсинга моих параметров командной строки. Если я использую parse!
вместо parse
(таким образом, это удаляет вещи, которые это анализирует из списка аргументов), тогда, приложение хорошо работает.
Таким образом, это похоже, добирается, читает из ARGV по некоторым причинам. Почему? Это ожидается? Есть ли способ заставить это не делать это (выполнение gets()
не помог).
Ruby автоматически лечит непростые аргументы в качестве имена файлов, а затем открывают и прочитали файлы, делающие вход, доступные для ARGF
( $ <
). По умолчанию получает
чтения из ARGF. Чтобы обойти это:
$stdin.gets
было предложено, чтобы вы могли использовать stdin
вместо $ stdin
, но это обычно лучше использовать $ stdin
Отказ
Дополнительно после того, как вы будете захватывать нужный ввод из ARGV
, вы можете использовать:
ARGV.clear
, то вы будете свободны в , получите
без него, которые не получают чтение от файлов, которые вы не можете намеревался прочитать.
Точка из ядра #
- это лечение аргументов, передаваемых программе в качестве имена файлов и прочитайте эти файлы. Самое первое предложение в Документация гласит:
возвращает (и назначает $ _) следующую строку из списка файлов в ARGV (или $ *)
, именно просто как Получает
работает. Если вы хотите прочитать из , объекта IO
(скажем, $ stdin
), просто вызовите на этом объекте
.