2013-08-22 38 views
19

Tôi đang viết một chương trình sử dụng argparse, để phân tích cú pháp một số đối số mà tôi cần.Python argparse: thông số tên

cho bây giờ tôi có điều này:

parser.add_argument('--rename', type=str, nargs=2, help='some help')

khi tôi chạy kịch bản này, tôi thấy điều này:

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

Làm thế nào tôi có thể thay đổi mã của tôi theo cách đó mà sự giúp đỡ "trang" sẽ chỉ cho tôi:

--rename OLDFILE NEWFILE 

Tôi có thể sử dụng OLD FILENEWFILE giá trị theo cách này?

args.rename.oldfile 
args.rename.newfile 

Trả lời

26

Nếu bạn đặt metavar=('OLDFILE', 'NEWFILE'):

import argparse 
parser = argparse.ArgumentParser() 
parser.add_argument('--rename', type=str, nargs=2, help='some help', 
        metavar=('OLDFILE', 'NEWFILE')) 
args = parser.parse_args() 
print(args) 

Sau đó test.py -h mang

usage: test.py [-h] [--rename OLDFILE NEWFILE] 

optional arguments: 
    -h, --help   show this help message and exit 
    --rename OLDFILE NEWFILE 
         some help 

Sau đó bạn có thể truy cập vào tranh cãi với

oldfile, newfile = args.rename 

Nếu bạn thực sự muốn truy cập ol dfile với args.rename.oldfile bạn có thể thiết lập một hành động tùy chỉnh:

import argparse 
class RenameAction(argparse.Action): 
    def __call__(self, parser, namespace, values, option_string=None): 
     setattr(namespace, self.dest, 
       argparse.Namespace(
        **dict(zip(('oldfile', 'newfile'), 
           values)))) 

parser = argparse.ArgumentParser() 
parser.add_argument('--rename', type=str, nargs=2, help='some help', 
        metavar=('OLDFILE', 'NEWFILE'), 
        action=RenameAction) 
args = parser.parse_args() 

print(args.rename.oldfile) 

nhưng nó thêm mã không thực sự dường như giá trị nó cho tôi.

+0

cảm ơn vì tất cả các chi tiết được cung cấp ... "oldfile, newFile = args.rename" sẽ thực hiện công việc :) – Wolfy

1

Đọc tài liệu argparse (http://docs.python.org/2.7/library/argparse.html#metavar):

giá trị khác nhau của nargs có thể gây ra các metavar sẽ được sử dụng nhiều lần. Cung cấp một tuple để metavar quy định cụ thể một màn hình khác nhau cho mỗi người trong số các đối số:

>>> parser = argparse.ArgumentParser(prog='PROG') 
>>> parser.add_argument('-x', nargs=2) 
>>> parser.add_argument('--foo', nargs=2, metavar=('bar', 'baz')) 
>>> parser.print_help() 
usage: PROG [-h] [-x X X] [--foo bar baz] 

optional arguments: 
-h, --help  show this help message and exit 
-x X X 
--foo bar baz 
Các vấn đề liên quan