OptionParser Επιλογές γραμμής εντολών του Ruby Way

Το Ruby είναι εξοπλισμένο με ένα ισχυρό και ευέλικτο εργαλείο για την ανάλυση των επιλογών γραμμής εντολών, OptionParser. Μόλις μάθετε πώς να το χρησιμοποιήσετε αυτό, δεν θα επιστρέψετε ποτέ στην αναζήτηση του ARGV με μη αυτόματο τρόπο. Το OptionParser διαθέτει μια σειρά χαρακτηριστικών που το κάνουν αρκετά ελκυστικό για τους προγραμματιστές Ruby. Εάν έχετε αναλύσει ποτέ επιλογές με το χέρι στο Ruby ή C, ή με το getoptlong C, θα δείτε πόσο ευπρόσδεκτοι είναι μερικές από αυτές τις αλλαγές.

  • Το OptionParser είναι ΞΗΡΟΣ. Πρέπει να γράψετε μόνο τον διακόπτη γραμμής εντολών, τα επιχειρήματά του, τον κώδικα που θα τρέξει όταν εμφανιστεί και την περιγραφή του διακόπτη γραμμής εντολών μία φορά στη δέσμη ενεργειών σας. Το OptionParser θα δημιουργήσει αυτόματα οθόνες βοήθειας για εσάς από αυτήν την περιγραφή, καθώς θα συνάγει τα πάντα για το επιχείρημα από την περιγραφή του. Για παράδειγμα, θα γνωρίζει το - αρχείο [ΑΡΧΕΙΟ] επιλογή είναι προαιρετική και λαμβάνει ένα μόνο επιχείρημα. Επίσης, θα το ξέρει αυτό - [- όχι] -verbose είναι δύο επιλογές και θα δέχονται και τις δύο μορφές.
  • instagram viewer
  • Το OptionParser θα μετατρέπει αυτόματα τις επιλογές σε μια συγκεκριμένη κατηγορία. Εάν η επιλογή παίρνει έναν ακέραιο αριθμό, μπορεί να μετατρέψει οποιαδήποτε συμβολοσειρά που μεταφέρεται στη γραμμή εντολών σε ακέραιο αριθμό. Αυτό μειώνει ορισμένα από τα tedium που εμπλέκονται στην ανάλυση των επιλογών γραμμής εντολών.
  • Όλα είναι πολύ περιορισμένα. Όλες οι επιλογές βρίσκονται στο ίδιο σημείο και το αποτέλεσμα της επιλογής είναι σωστό κατά μήκος του ορισμού της επιλογής. Αν οι επιλογές πρέπει να προστεθούν, να αλλάξουν ή κάποιος απλά θέλει να δει τι κάνουν, υπάρχει μόνο ένα μέρος για να κοιτάξουμε. Μόλις γίνει η ανάλυση της γραμμής εντολών, θα διατηρηθούν τα αποτελέσματα μόνο ένα Hash ή OpenStruct.

Αρκετά ήδη, δείξε με μερικούς κώδικες

Έτσι, εδώ είναι ένα απλό παράδειγμα του τρόπου χρήσης OptionParser. Δεν χρησιμοποιεί καμία από τις προηγμένες λειτουργίες, απλά τα βασικά. Υπάρχουν τρεις επιλογές και μία από αυτές παίρνει μια παράμετρο. Όλες οι επιλογές είναι υποχρεωτικές. Υπάρχουν οι -v / - verbose και -q / - γρήγορη επιλογές, καθώς και το -l / - αρχείο αρχείου καταγραφής επιλογή. Επιπλέον, το σενάριο παίρνει μια λίστα αρχείων ανεξάρτητα από τις επιλογές.

 #! / usr / bin / env ruby

 # Μια δέσμη ενεργειών που θα προσποιείται ότι αλλάζει μέγεθος πολλών εικόνων

 απαιτούν 'optparse'


 # Αυτό το hash θα κρατήσει όλες τις επιλογές

 # αναλύθηκε από τη γραμμή εντολών από

 # OptionParser.

 επιλογές = {}


 optparse = OptionParser.new κάνουμε | opts |

 # Ορίστε ένα πανό που εμφανίζεται στο επάνω μέρος

 # της οθόνης βοήθειας.

 opts.banner = "Χρήση: optparse1.rb [επιλογές] file1 file2 ..."


 # Καθορίστε τις επιλογές και τι κάνουν

 επιλογές [: verbose] = false

 opts.on ('-v', '--verbose', 'Έξοδος περισσότερες πληροφορίες')

 επιλογές [: verbose] = true

 τέλος


 επιλογές [: quick] = false

 opts.on ('-q', '--quick', 'Εκτέλεση της εργασίας γρήγορα')

 επιλογές [: quick] = true

 τέλος


 επιλογές [: logfile] = μηδέν

 opts.on ('-l', '--logfile ΑΡΧΕΙΟ', 'Γράψτε το αρχείο στο αρχείο') do | file |

 επιλογές [: logfile] = αρχείο

 τέλος


 # Εμφανίζεται η οθόνη βοήθειας, όλα τα προγράμματα είναι

 # υποτίθεται ότι έχει αυτή την επιλογή.

 opts.on ('-h', '--help', 'Εμφάνιση αυτής της οθόνης')

 βάζει επιλογές

 έξοδος

 τέλος

 τέλος


 # Ανίχνευση της γραμμής εντολών. Θυμηθείτε ότι υπάρχουν δύο μορφές

 # της μεθόδου ανάλυσης. Η μέθοδος "parse" απλά αναλύει

 # ARGV, ενώ το 'parse!' η μέθοδος αναλύει το ARGV και καταργεί

 # οποιεσδήποτε επιλογές βρίσκονται εκεί, καθώς και οποιεσδήποτε παράμετροι για

 # τις επιλογές. Αυτό που έχει απομείνει είναι η λίστα αρχείων για αλλαγή μεγέθους.

 optparse.parse!


 θέτει "Έντονη" εάν οι επιλογές [: verbose]

 βάζει "γρήγορη" εάν οι επιλογές [: γρήγορη]

 θέτει "Καταγραφή στο αρχείο # {options [: logfile]}" εάν οι επιλογές [: logfile]


 ARGV.αποτελεί | f |

 θέτει "Αλλαγή μεγέθους εικόνας # {f} ..."

 ύπνο 0,5

 τέλος

Εξέταση του Κώδικα

Για να ξεκινήσετε με, το optparse βιβλιοθήκη. Θυμηθείτε, αυτό δεν είναι α κόσμημα. Έρχεται με τον Ruby, οπότε δεν χρειάζεται να εγκαταστήσετε ένα πολύτιμο λίθο ή να το χρειαστείτε ρουμπίνια πριν optparse.

Υπάρχουν δύο ενδιαφέροντα αντικείμενα σε αυτό το σενάριο. Το πρώτο είναι επιλογές, που δηλώνονται στο ανώτατο πεδίο εφαρμογής. Είναι απλό κενό χασίσι. Όταν ορίζονται οι επιλογές, γράφουν τις προεπιλεγμένες τιμές τους σε αυτό το hash. Για παράδειγμα, η προεπιλεγμένη συμπεριφορά είναι για αυτό το σενάριο δεν να είναι verbose, έτσι επιλογές [: λεπτομερής] έχει οριστεί σε ψευδή. Όταν εντοπιστούν επιλογές στη γραμμή εντολών, αυτές θα αλλάξουν τις τιμές στο επιλογές για να αντικατοπτρίζουν τις επιπτώσεις τους. Για παράδειγμα, πότε -v / - verbose αντιμετωπίζεται, θα εκχωρήσει αληθινό σε επιλογές [: λεπτομερής].

Το δεύτερο ενδιαφέρον αντικείμενο είναι optparse. Αυτό είναι το OptionParser αντικείμενο. Όταν κατασκευάζετε αυτό το αντικείμενο, το περάσετε ένα μπλοκ. Αυτό το μπλοκ εκτελείται κατά την κατασκευή και θα δημιουργήσει μια λίστα επιλογών στις εσωτερικές δομές δεδομένων και ετοιμαστείτε να αναλύσετε τα πάντα. Είναι σε αυτό το μπλοκ ότι συμβαίνει όλη η μαγεία. Μπορείτε να ορίσετε όλες τις επιλογές εδώ.

Ορισμός επιλογών

Κάθε επιλογή ακολουθεί το ίδιο μοτίβο. Καταχωρίστε πρώτα την προεπιλεγμένη τιμή στο hash. Αυτό θα συμβεί μόλις το OptionParser είναι κατασκευασμένο. Στη συνέχεια, καλέστε το επίμέθοδος, η οποία καθορίζει την ίδια την επιλογή. Υπάρχουν διάφορες μορφές αυτής της μεθόδου, αλλά μόνο μία χρησιμοποιείται εδώ. Οι άλλες μορφές σάς επιτρέπουν να ορίσετε τις μετατροπές αυτόματου τύπου και τα σύνολα τιμών που μια επιλογή είναι περιορισμένη. Τα τρία επιχειρήματα που χρησιμοποιούνται εδώ είναι η σύντομη μορφή, η μακρά μορφή και η περιγραφή της επιλογής.

ο επί η μέθοδος θα συναγάγει πολλά πράγματα από τη μακρά φόρμα. Ένα πράγμα είναι να συμπεράνει είναι η παρουσία οποιωνδήποτε παραμέτρων. Αν υπάρχουν παραμέτρους στην επιλογή, θα τις μεταβιβάσει ως παράμετροι στο μπλοκ.

Εάν η επιλογή εντοπιστεί στη γραμμή εντολών, το μπλοκ πέρασε στο επί η μέθοδος εκτελείται. Εδώ, τα μπλοκ δεν κάνουν πολλά, απλά ορίζουν τιμές στο hash επιλογών. Θα μπορούσαν να γίνουν περισσότερα, όπως ο έλεγχος του υπάρχοντος αρχείου κ.λπ. Αν υπάρχουν σφάλματα, μπορούν να λαμβάνονται εξαιρέσεις από αυτά τα μπλοκ.

Τέλος, η γραμμή εντολών αναλύεται. Αυτό συμβαίνει καλώντας το αναλύω πρόταση! μέθοδος σε μια OptionParser αντικείμενο. Υπάρχουν στην πραγματικότητα δύο μορφές αυτής της μεθόδου, αναλύω πρόταση και αναλύω πρόταση!. Όπως σημαίνει η εκδοχή με το θαυμαστικό, είναι καταστρεπτική. Όχι μόνο αναλύει την γραμμή εντολών, αλλά θα αφαιρέσει όλες τις επιλογές που βρέθηκαν από ARGV. Αυτό είναι ένα σημαντικό πράγμα, θα αφήσει μόνο τη λίστα των αρχείων που παρέχονται μετά τις επιλογές στο ARGV.

instagram story viewer