ניתוח שורת פקודה ברובי

הכותרת קצת מטעה, אבל כאשר כותבים תוכנות בעיקר בעולם היוניקס, נהוג לתת אפשרויות בשורת הפקודה לתכנה. הבעיה היא כיצד ניתן לנתח את מה שעובר, ולשם כך רובי מגיעה עם ספרייה פשוטה בשם optparse המגיעה כספרייה סטנדרטית ברובי.

העבודה בה מאד פשוטה ומחביאה הרבה מאוד כוח נסתר. תכנית מאוד פשוטה המשתמשת בה, תראה כזו:

#!/usr/bin/env ruby
require 'optparse'

VERSION = '99.1b'

# default values for options ...
options = { :path => '', :number => 0, :uri => nil}

parse = OptionParser.new do|opt|
  opt.banner = 'Usage: my_app.rb  [option] [option]'
  opt.on('-v', '--version', 'Display the program version') do
    puts "my_app.rb v#{VERSION}"
  end
  opt.on('-p PATH', '--path=PATH', 'What path to use ?') do |path|
    option[:path] = path
  end
  opt.on('-n=NUM', '--number NUM', Fixnum, 'Use numbers only') do |num|
    option[:number] = num
  end
  opt.on('--uri URI', 'Mandatory field') do |uri|
    option[:uri] = uri
  end
  opt.on('-h', '--help', 'Display this screen') do
    puts opt
    exit
  end
end

begin
 parse.parse!
 raise OptionParser::MissingArgument if options[:uri].nil? # mandatory fields
rescue => e
  $stderr.puts "You did not supply proper values: #{e.message}"
end

ההדגמה מבצעת מספר דברים אשר מראים את הכוח העצום של הספרייה ואת רוב היכולות שלה. אני מציג כיצד ניתן לקבל פרמטר צורך בערך. אני מציג כיצד ניתן להגיד איך לפרש פרמטר מול ערך (כלומר המפריד הוא רווח, הסימן = וכו'), אני מראה כיצד מציגים עזרה על הפרמטרים השונים, אני מציג כיצד להכריח את המפרש לקבל מספר שלם, ואני אפילו מתעסק במצב בו יש פרמטר שהוא חובה, אבל לא קיבלנו אותו.

4 מחשבות על “ניתוח שורת פקודה ברובי

  1. Tzafrir Cohen

    חסרה כאן מילת מפתח:

    השם המקובל בעולם של יוניקס למה שעושה את זה הוא getopt ע"ש הפונקציה המקורית (חלק מ-POSIX). יש לה גרסאות מורחבות בשפות שונות (בפרט מוסכמות יותר נוחות שהגיעו במקור מגנו).

    1. ik_5 מאת

      getopt הוא מימוש אחד בלבד לעשות את זה, ולדעתי לא פשוט או נוח. הכלי הזה שהצגתי כאן, מאוד קריא וקל להתאמה בכל שלב שצריך, ועושה עבורך הרבה מאוד פעולות שאחרת היית צריך לממש בעצמך.

      1. Tzafrir Cohen

        getopt הוא גם שם, לא רק מימוש. getopt המקורי מאוד מוגבל ולא נוח. getopt_long של גנו כבר פחות מוגבל אבל עוד פחות נוח לשימוש. בפרל יש getopt בסיסי וכמה גרסאות נוחות יותר במודולים שלמרבה הפלא מופצים כחלק מההפצה הראשית. בפייתון יש מודול בשם getopt.

להשאיר תגובה

הזינו את פרטיכם בטופס, או לחצו על אחד מהאייקונים כדי להשתמש בחשבון קיים:

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s