2012-10-25 19 views
20

में एक अलग तर्क समूह में "सहायता" ले जाएं वर्तमान में मैं पायथन का उपयोग कर एक निर्देशिका पाठक प्रोग्राम बना रहा हूं। मैं कमांड लाइन से तर्कों का विश्लेषण करने के लिए 'argparse' का उपयोग कर रहा हूं।पायथन Argparse

parser = argparse.ArgumentParser(prog = "LS.py", 
           usage = "%(prog)s [options] [path1 [path2 [...pathN]]]\nThe paths are optional; if not given . is used.") 

group = parser.add_argument_group("Options") 

group.add_argument("-path", default = ".", help = argparse.SUPPRESS, metavar = "") 
group.add_argument("-m", "--modified", default = False, 
        help = "show last modified date/time [default: off]", 
        metavar = "") 
group.add_argument("-o ORDER", "--order=ORDER", nargs = 2, default = "name", 
        help = "order by ('name', 'n', 'modified', 'm', 'size', 's')\n[default: name]", 
        metavar = "") 
group.add_argument("-r", "--recursive", default = False, 
        help = "recurse into subdirectories [default: off]", 
        metavar = "") 
group.add_argument("-s", "--sizes", default = False, 
        help = "show sizes [default: off]", metavar = "") 

args = parser.parse_args() 
return args 

जब निम्नलिखित तरीके "LS.py -h" यह निम्नलिखित उत्पादन का उत्पादन में कहा जाता है:

usage: LS.py [options] [path1 [path2 [...pathN]]] 
The paths are optional; if not given . is used. 

optional arguments: 
    -h, --help   show this help message and exit 

Options: 
    -m , --modified  show last modified date/time [default: off] 
    -o ORDER , --order=ORDER 
        order by ('name', 'n', 'modified', 'm', 'size', 's') 
        [default: name] 
    -r , --recursive  recurse into subdirectories [default: off] 
    -s , --sizes   show sizes [default: off] 

मेरा प्रश्न: क्या डिफ़ॉल्ट स्थानांतरित करने के लिए एक रास्ता है मैं निम्नलिखित कोड है विकल्प जैसे समूह में तर्क की सहायता करें? इसके अलावा, मुझे विकल्प तर्कों में अल्पविराम से पहले स्थान को हटाने का कोई तरीका नहीं दिख रहा है। आदर्श आउटपुट है:

Usage: ls.py [options] [path1 [path2 [...pathN]]] 
The paths are optional; if not given . is used. 

Options: 
    -h, --help   show this help message and exit 
    -m, --modified  show last modified date/time [default: off] 
    -o ORDER, --order=ORDER 
         order by ('name', 'n', 'modified', 'm', 'size', 's') 
         [default: name] 
    -r, --recursive  recurse into subdirectories [default: off] 
    -s, --sizes   show sizes [default: off] 

उत्तर

24

अक्षम निर्मित मदद कमान और जोड़ने के लिए add_help=False उपयोग कर सकते हैं अपने बजाय खुद, action="help" का उपयोग कर: चाल सिर्फ add_help=False जोड़ने के लिए ArgumentParser निर्माता और फिर समूह में अपनी खुद की मदद कार्रवाई जोड़ने है धन्यवाद @ mgilson!)

रिक्त स्थान से छुटकारा पाने के लिए, metavar को खाली स्ट्रिंग पर सेट न करें। आपके विकल्प उन्हें सच (तर्क-कम) विकल्प बनाने के लिए action="store_true" का उपयोग कर निर्दिष्ट किया जाना चाहिए:

import argparse 

parser = argparse.ArgumentParser(prog="LS.py", 
           usage="%(prog)s [options] [paths...]\nThe paths are optional; if not given . is used.", 
           add_help=False) 

group = parser.add_argument_group("Options") 

group.add_argument("-h", "--help", action="help", help="show this help message and exit") 
group.add_argument("-path", default=".", help=argparse.SUPPRESS) 
group.add_argument("-m", "--modified", action="store_true", 
        help="show last modified date/time") 
group.add_argument("-o", "--order", nargs=1, default="name", 
        help="sort order (n[ame], m[odified], s[ize])\n[default: name]") 
group.add_argument("-r", "--recursive", action="store_true", 
        help="recurse into subdirectories") 
group.add_argument("-s", "--sizes", action="store_true", 
        help="show sizes") 

args = parser.parse_args() 

आउटपुट:

Options: 
    -h, --help   show this help message and exit 
    -m, --modified  show last modified date/time 
    -o ORDER, --order ORDER 
         sort order (n[ame], m[odified], s[ize]) [default: 
         name] 
    -r, --recursive  recurse into subdirectories 
    -s, --sizes   show sizes 
+0

यदि आप 'action =" store_true "' – mgilson

+0

Derp के बजाय 'action =" help "' का उपयोग करते हैं तो यह भी आसान है, क्रिया क्रियाओं को स्किम करते समय मुझे इसे याद करना होगा। धन्यवाद! – nneonneo

+0

इसने मेरे सभी सवालों का जवाब दिया, बहुत बहुत धन्यवाद। मैं थोड़ी देर के लिए प्रलेखन देख रहा था और इसे ढूंढ नहीं पाया। –

6

निश्चित रूप से आप ऐसा कर सकते हैं। (

import argparse 

parser = argparse.ArgumentParser(prog = "LS.py", 
           usage = "%(prog)s [options] [path1 [path2 [...pathN]]]\nThe paths are optional; if not given . is used.", 
           add_help=False) 

group = parser.add_argument_group("Options") 

group.add_argument("-path", default = ".", help = argparse.SUPPRESS, metavar = "") 
group.add_argument("-m", "--modified", default = False, 
        help = "show last modified date/time [default: off]", 
        metavar = "") 
group.add_argument("-o ORDER", "--order=ORDER", nargs = 2, default = "name", 
        help = "order by ('name', 'n', 'modified', 'm', 'size', 's')\n[default: name]", 
        metavar = "") 
group.add_argument("-h", "--help", action='help', help='print this fabulous help message') 
group.add_argument("-r", "--recursive", default = False, 
        help = "recurse into subdirectories [default: off]", 
        metavar = "") 
group.add_argument("-s", "--sizes", default = False, 
        help = "show sizes [default: off]", metavar = "") 

args = parser.parse_args() 
0

गाढ़ा और पिछले answer by nneonneo पर थोड़ा आसान बनाने के लिए, आप कर सकते हैं:

import argparse 

parser = argparse.ArgumentParser(prog="LS.py", 
           usage="%(prog)s [options] [paths...]\nThe paths are optional; if not given . is used.", 
           add_help=False) 

add_arg = parser.add_argument_group("Options").add_argument 

add_arg("-h", "--help", action="help", help="show this help message and exit") 
add_arg("-path", default=".", help=argparse.SUPPRESS) 
add_arg("-m", "--modified", action="store_true", 
     help="show last modified date/time") 
add_arg("-o", "--order", nargs=1, default="name", 
     help="sort order (n[ame], m[odified], s[ize])\n[default: name]") 
add_arg("-r", "--recursive", action="store_true", 
     help="recurse into subdirectories") 
add_arg("-s", "--sizes", action="store_true", 
     help="show sizes") 

args = parser.parse_args() 

असल में, पिछले जवाब से मामूली बदलाव है कि यह group और टी को बचाने के लिए आवश्यक नहीं है मुर्गी बार-बार add_argument विधि पर कॉल करें।

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