#ruby #options
#ruby #optionparser
Вопрос:
Я пытаюсь настроить пару параметров в скрипте Ruby с помощью OptionParser
. Я бы хотел, чтобы они оба были необязательными, но требовали, чтобы использовался хотя бы один. Один из вариантов позволяет передавать одно значение из командной строки. Другой вариант укажет скрипту использовать файл, содержащий несколько значений для повторения.
Это все, что я смог придумать:
options = {}
parser = OptionParser.new do |opts|
opts.banner = "Usage: sat_server_delete.rb [options]"
opts.on('-f', '--file file', 'File') do |file|
options[:file] = file;
end
opts.on('-s', '--server server', 'Server') do |server|
options[:server] = server
end
end.parse!
Я еще не разработал логику, которую будет использовать каждый. Прямо сейчас я был бы рад просто увидеть ошибку, указывающую на то, что ни один из них не был предоставлен. Пока я не понимаю даже этого. Скрипт просто выполняется до завершения и возвращается к подсказке.
Я просмотрел документ Ruby OptionParser
, но мне не ясно, как выполнить то, что я пытаюсь. Возможно ли вообще иметь ситуацию или / или с опциями? Я даже не уверен, имеет ли смысл то, что у меня уже есть. Я в основном просто пытаюсь скопировать логику, не полностью понимая, что она делает.
Комментарии:
1. Я думаю, вы просите
OptionParser
сделать больше, чем его справедливая доля. Его доля заключается в анализе параметров . То, что вы делаете с результатом (options
хэшем), полностью зависит от вас. После анализа всей командной строки вы можете решитьexit
, если ни один из вариантов не присутствует. Конечно, вы должны указать это поведение в своемusage
.2. @Patru это звучит правильно для меня. Сделайте это ответом, и я поддержу его.
Ответ №1:
Вы можете проверить options
хэш после parse!
as в
if options[:file] amp;amp; options[:server]
puts "may have only one of -f and -s"
exit
elsif !options[:file] amp;amp; !options[:server]
puts "must have at least one of -f and -s"
exit
end
Комментарии:
1. Спасибо. Я не был уверен
OptionParser
, встроена ли эта функциональность.