2012-10-25 15 views
20

現在、私はPythonを使ってディレクトリリーダープログラムを作成しています。 私はコマンドラインから引数を解析するために 'argparse'を使用しています。"help"をPythonの異なる引数グループに移動するargparse

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] 

私の質問:次のように「LS.py -h」は、それは次の出力を生成して呼ば

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 

:デフォルトを移動する方法はあります私は、次のコードを持っていますOptionsのようなグループに引数を付ける? また、オプション引数のカンマの前にスペースを削除する方法が見つからないようです。理想的な出力は次のとおりです。

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

あなたは(action="help"を使用して、組み込みのhelpコマンドを無効にし、代わりにあなた自身を追加するためにadd_help=Falseを使用することができますありがとう@mgilson!)

スペースを取り除くには、metavarに空の文字列を設定しないでください。

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() 

出力::あなたのオプションは、彼らの真(引数なし)オプションにするaction="store_true"を使用して指定する必要があります

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

確かに可能です。トリックはちょうどadd_help=FalseArgumentParserコンストラクタを追加し、グループに独自のヘルプアクションを追加することです:

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とtを保存する必要はありませんということです鶏はadd_argumentメソッドを繰り返し呼び出します。