Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन में C-स्टाइल कमांड लाइन ऑप्शन पार्सिंग (getopt)

getopt मॉड्यूल यूनिक्स getopt() फंक्शन की तरह कमांड लाइन आर्गुमेंट्स पार्स करता है। यह sys.argv को प्रोसेस करने का पारंपरिक तरीका है (आधुनिक विकल्प: argparse)।

बेसिक: sys.argv एक्सेस

import sys

print('स्क्रिप्ट नाम:', sys.argv[0])
print('आर्गुमेंट्स:', sys.argv[1:])

चलाना:

$ python args.py 11 22
स्क्रिप्ट नाम: args.py
आर्गुमेंट्स: ['11', '22']

getopt.getopt() फंक्शन

getopt.getopt(args, shortopts, longopts=[])
  • args: आर्गुमेंट लिस्ट (sys.argv[1:])
  • shortopts: ऑप्शन अक्षरों की स्ट्रिंग, कोलन (:) से आर्गुमेंट आवश्यक दर्शाता है
  • longopts: लॉन्ग ऑप्शन नामों की लिस्ट (बिना --), बराबर चिह्न (=) से आर्गुमेंट आवश्यक

उदाहरण: इनपुट/आउटपुट फाइल ऑप्शन्स

import sys
import getopt

def main():
    input_file = ''
    output_file = ''
    
    try:
        # shortopts: h (नो आर्गुमेंट), i: (आर्गुमेंट आवश्यक), o: (आर्गुमेंट आवश्यक)
        # longopts: ifile=, ofile= (आर्गुमेंट आवश्यक)
        opts, args = getopt.getopt(sys.argv[1:], "hi:o:", ["ifile=", "ofile="])
    except getopt.GetoptError as err:
        print(f'त्रुटि: {err}')
        print('उपयोग: test.py -i  -o ')
        sys.exit(2)
    
    for opt, arg in opts:
        if opt == '-h':
            print('उपयोग: test.py -i  -o ')
            sys.exit()
        elif opt in ("-i", "--ifile"):
            input_file = arg
        elif opt in ("-o", "--ofile"):
            output_file = arg
    
    print(f'इनपुट फाइल: {input_file}')
    print(f'आउटपुट फाइल: {output_file}')

if __name__ == '__main__':
    main()

चलाना और आउटपुट

$ python args.py -h
उपयोग: test.py -i  -o 

$ python args.py -i abc.txt -o xyz.txt
इनपुट फाइल: abc.txt
आउटपुट फाइल: xyz.txt

$ python args.py --ifile=abc.txt --ofile=xyz.txt
इनपुट फाइल: abc.txt
आउटपुट फाइल: xyz.txt

रिटर्न वैल्यू संरचना

opts, args = getopt.getopt(...)

# opts: [(option, value), ...] लिस्ट
#   option: '-x' (शॉर्ट) या '--long-option' (लॉन्ग)
#   value: आर्गुमेंट स्ट्रिंग या '' (यदि कोई आर्गुमेंट नहीं)
# args: ऑप्शन स्ट्रिप होने के बाद बचे प्रोग्राम आर्गुमेंट्स

उन्नत उदाहरण: मल्टीपल ऑप्शन्स

import sys
import getopt

def main():
    verbose = False
    output = 'output.txt'
    count = 1
    files = []
    
    try:
        opts, args = getopt.getopt(sys.argv[1:], 
            "vho:c:", 
            ["verbose", "help", "output=", "count=", "file="])
    except getopt.GetoptError as err:
        print(err)
        sys.exit(2)
    
    for opt, arg in opts:
        if opt in ("-v", "--verbose"):
            verbose = True
        elif opt in ("-h", "--help"):
            print_help()
            sys.exit()
        elif opt in ("-o", "--output"):
            output = arg
        elif opt in ("-c", "--count"):
            count = int(arg)
        elif opt == "--file":
            files.append(arg)
    
    # शेष आर्गुमेंट्स भी फाइल्स मानें
    files.extend(args)
    
    print(f"Verbose: {verbose}")
    print(f"Output: {output}")
    print(f"Count: {count}")
    print(f"Files: {files}")

def print_help():
    print("""
उपयोग: script.py [विकल्प] [फाइल्स...]
विकल्प:
  -v, --verbose      वर्बोज मोड
  -h, --help         यह मदद दिखाएं
  -o, --output FILE  आउटपुट फाइल
  -c, --count N      काउंट मान
  --file FILE        इनपुट फाइल (मल्टीपल अनुमत)
""")

if __name__ == '__main__':
    main()

argparse से तुलना (आधुनिक, अनुशंसित)

import argparse

parser = argparse.ArgumentParser(description='फाइल प्रोसेसिंग टूल')
parser.add_argument('-i', '--input', required=True, help='इनपुट फाइल')
parser.add_argument('-o', '--output', help='आउटपुट फाइल')
parser.add_argument('-v', '--verbose', action='store_true', help='वर्बोज मोड')
parser.add_argument('files', nargs='*', help='अतिरिक्त फाइल्स')

args = parser.parse_args()
print(args.input, args.output, args.verbose, args.files)

कौन सा चुनें?

विशेषताgetoptargparse
सीखने में आसानीसरलथोड़ा जटिल
पावर/फ्लेक्सिबिलिटीसीमितबहुत शक्तिशाली
ऑटो हेल्प जनरेशननहींहाँ
टाइप वैलिडेशनमैनुअलबिल्ट-इन
सबकमांड्सनहींहाँ
पायथन संस्करणसभी2.7+/3.2+

सिफारिश: नए प्रोजेक्ट्स के लिए argparse उपयोग करें। getopt केवल लीगेसी कोड या सरल स्क्रिप्ट्स के लिए।

  1. पायथन मैटप्लॉटलिब में कर्व्ड लाइन के लिए शीर्षक कैसे रखें पायथन मैटप्लॉटलिब में कर्व्ड लाइन के लिए शीर्षक कैसे रखें

    पायथन मैटप्लॉटलिब में कर्व्ड लाइन के लिए शीर्षक रखने के लिए, हम निम्नलिखित चरण अपना सकते हैं: चरण फिगर का आकार सेट करें और सबप्लॉट्स के बीच और आसपास पैडिंग एडजस्ट करें। x और y डेटा पॉइंट्स बनाएं ताकि लाइन एक कर्व हो। x और y डेटा पॉइंट्स प्लॉट करें। plt.title() मेथड का उपयोग करके कर्व प्लॉट के लिए

  1. कमांड लाइन के माध्यम से Python Matplotlib के साथ इंटरैक्टिव प्लॉटिंग कमांड लाइन के माध्यम से Python Matplotlib के साथ इंटरैक्टिव प्लॉटिंग

    इंटरैक्टिव प्लॉट्स प्राप्त करने के लिए फिगर को एक्टिवेट करना होगा। plt.ioff() और plt.ion() का उपयोग करके प्लॉट के साथ इंटरैक्टिव एक्शन परफॉर्म कर सकते हैं। Ipython शेल खोलें और शेल पर निम्न कमांड्स एंटर करें। उदाहरण In [1]: %matplotlib auto Using matplotlib backend: GTK3Agg In [2]: import matplotl

  1. पायथन में Tkinter बटन के लिए कमांड मेथड बदलना पायथन में Tkinter बटन के लिए कमांड मेथड बदलना

    बटन विजेट का महत्व यह है कि इसका उपयोग एप्लिकेशन में कुछ ऑपरेशन करने के लिए इवेंट्स को संभालने के लिए किया जाता है। ऐसे इवेंट्स को संभालने के लिए, हम आमतौर पर एक विधि परिभाषित करते हैं जिसमें कुछ ऑपरेशन होते हैं। मान लीजिए हम बटन को इनिशियलाइज़ करने के बाद इवेंट मेथड को बदलना चाहते हैं। हम configu