2012-03-23 13 views
6

मैंने कुछ पाइथन को एल्गोरिदम पर कुछ बुनियादी ज्ञान के साथ अपनी पहली प्रोग्रामिंग भाषा के रूप में सीखने का गंभीर प्रयास शुरू कर दिया है। चूंकि सभी ने सिफारिश की है कि शुरू करने का सबसे अच्छा तरीका कुछ उपयोगी खोजने के लिए है, मैंने अपने भंडारों को प्रबंधित करने के लिए एक छोटी सी स्क्रिप्ट करने का निर्णय लिया है।पायथन - शुरुआत - एक कार्यक्रम में ऑप्टपरसे एकीकृत करना

बुनियादी बातें: - वर्तमान yum रिपॉजिटरी पर प्राथमिकता बदलें - - सक्षम/अक्षम yum रिपॉजिटरी जोड़ें/खजाने

निकालें फ़ाइल को पार्स जबकि और की जगह/जोड़ें/निकालें डेटा काफी सरल है, मैं कर रहा हूँ 'ऑप्टपरसे' के साथ एक ही चीज़ के साथ संघर्ष (मुख्य रूप से ज्ञान की कमी के साथ) ... मैं एक विकल्प (-l) में जोड़ना चाहता हूं जो मौजूदा उपलब्ध भंडारों को सूचीबद्ध करता है ... मैंने एक सरल कार्य किया है जो यह करता है नौकरी (कुछ बहुत विस्तृत नहीं), लेकिन मैं इसे '-l' के साथ 'कनेक्ट' करने में असमर्थ हूं। कोई भी इसे कैसे बनाया जाए इस पर उदाहरण/सुझाव प्रदान कर सकता है?

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import os 
import sys 
import optparse 
import ConfigParse 

repo_file = "/home/nmarques/my_repos.repo" 

parser = optparse.OptionParser() 
parser.add_option("-e", dest="repository", help="Enable YUM repository") 
parser.add_option("-d", dest="repository", help="Disable YUM repository") 
parser.add_option("-l", dest="list", help="Display list of repositories", action="store_true") 
(options, args) = parser.parse_args() 

def list_my_repos() 
    # check if repository file exists, read repositories, print and exit 
    if os.path.exists(repo_file): 
     config = ConfigParser.RawConfigParser() 
     config.read(repo_file) 
     print "Found the following YUM repositories on " + os.path.basename(repo_file) + ":" 
     for i in config.sections(): 
      print i 
     sys.exit(0) 
    # otherwise exit with code 4 
    else: 
     print "Main repository configuration (" + repo_file +") file not found!" 
     sys.exit(4) 

list_my_repos() 

कोई सुझाव (डॉक्स, उदाहरण) में सुधार करने के बहुत स्वागत है:

वर्तमान स्क्रिप्ट कुछ इस तरह है। मुख्य लक्ष्य एक बार और अधिक है, जब मैं script.py -l निष्पादित करता हूं तो यह list_my_repos() चला सकता है।

+0

आपको संभव होने पर 'argparse' का उपयोग करना चाहिए -' ऑप्टपरसे मॉड्यूल को बहिष्कृत किया गया है और आगे विकसित नहीं किया जाएगा; विकास Argparse मॉड्यूल के साथ जारी रहेगा। – Daenyth

उत्तर

6

पार्सिंग विकल्पों सीखने हमेशा नहीं बल्कि मेरे लिए अपारदर्शी किया गया है। argparse का उपयोग करना थोड़ा सा मदद करता है।

अंतर्दृष्टि जो मुझे लगता है वह मदद करेगा कि optparse मॉड्यूल वास्तव में कमांड लाइन पर निर्दिष्ट क्रियाओं को करने में आपकी सहायता नहीं करता है। इसके बजाय, यह आपको कमांड लाइन तर्क से जानकारी एकत्र करने में मदद करता है, जिसे आप बाद में कार्य कर सकते हैं।

इस मामले में, जानकारी आप एकत्र कर रहे हैं अपनी लाइन में टपल (options, args) में संग्रहीत है:

(options, args) = parser.parse_args() 

वास्तव में इस जानकारी पर कार्रवाई करने के लिए, आप में अपने स्वयं के जाँच करने के लिए करने जा रहे हैं तुम्हारा कोड। मैं अपने कार्यक्रम के अंत में इस तरह की चीजों को ब्लॉक में रखना चाहता हूं, which will only run if it is called from the command line

if __name__ == '__main__': 
    if options.list: 
     list_my_repos() 

कि यह कैसे एक छोटे से स्पष्ट काम करता है बनाने के लिए, यह एहसास है कि आप sys.argv का उपयोग करके, बिल्कुल optparse बिना एक ही बात कर सकता है में मदद करता है।

import sys 

if __name__ == '__main__': 
    if sys.argv[1] == '-l': 
     list_my_repos() 

जैसा कि आप शायद देख सकते हैं, हालांकि, यह एक बहुत ही कमजोर कार्यान्वयन होगा। अपने खुद के प्रोग्रामिंग के बिना अधिक जटिल मामलों को संभालने में सक्षम होने के नाते optparse/argparse आपको खरीदता है।

3

आप अपने कोड में -एल ध्वज का उपयोग नहीं कर रहे हैं। यह दस्तावेज दिखाता है कि ध्वज मौजूद है या नहीं, यह देखने के लिए कैसे जांचें। http://docs.python.org/library/optparse.html

(options, args) = parser.parse_args() 
if options.list: 
    list_my_repos() 
    return 
+0

पैंथर के उदाहरण के साथ चाल चल रही थी। – nmarques

5

पहले, optparse docs कहना पुस्तकालय हटा दिया गया है, और आप argparse बजाय का उपयोग करना चाहिए। तो चलो कि करते हैं:

import argparse 

parser = argparse.ArgumentParser() #Basic setup 
parser.add_argument('-l', action='store_true') #Tell the parser to look for "-l" 
#The action='store_true' tells the parser to set the value to True if there's 
#no value attached to it 
args = parser.parse_args() #This gives us a list of all the arguments 
#Passing the args -l will give you a namespace with "l" equal to True 

if args.l: #If the -l argument is there 
    print 'Do stuff!' #Go crazy 

गुड लक optparse का उपयोग कर अजगर :)

+0

अच्छी चीजें, लेकिन दुर्भाग्य से मैं अजगर 2.6 (आरएचईएल 6) पर हूं। मैं इसे बाद में ओपनएसयूएसई बॉक्स पर पाइथन 2.7 के साथ दूंगा। – nmarques

संबंधित मुद्दे