2013-12-09 14 views
8

Tôi muốn thiết kế ứng dụng dòng lệnh của tôi trong một cách mà một lựa chọn, chúng ta hãy gọi nó bình luận, có thể được quy định nhiều lần, ví dụ:Làm thế nào để xác định một đối số tùy chọn nhiều lần trong docopt

$ ./my_app.py --comment="Comment 1" --comment="Comment 2" 

Điều này có thể được thực hiện với docopt không? Tôi đã kiểm tra trang chủ docopt nhưng không thể tìm thấy bất kỳ tham chiếu nào đến nhiều lần xuất hiện của cùng một đối số tùy chọn.

+1

Tôi không chắc chắn về docopt, nhưng với argparse bạn có thể làm điều đó bằng [thêm hành động] (http://docs.python.org /dev/library/argparse.html#action) – smeso

Trả lời

4

Để tham khảo, tài liệu chính thức có thể là found here at github.

Để trả lời câu hỏi cụ thể của bạn, bạn có thể sử dụng hình elip ... với tùy chọn tùy chọn [--my-option] và chỉ định tùy chọn của bạn có một đối số.

I.e. [--my-option=ARG]... hoặc [--my-option=<arg>]...

Ví dụ:

""" 
Usage: 
    my_program [--comment=ARG]... FILE 

Arguments: 
    FILE  An argument for passing in a file. 

Options: 
    --comment Zero or more comments 
""" 

Bằng cách xác định nó như [--comment=<arg>]... bạn đảm bảo rằng lựa chọn [ '- nhận xét'] là một danh sách tất cả các ý kiến ​​cụ thể.

thực hiện: my_program --comment=ASDF --comment=QWERTY my_file

Dẫn đến:

if __name__ == '__main__': 
    opts = docopt(__doc__) 
    opts['--comment'] == ['ASDF', 'QWERTY'] 
    opts['FILE'] == 'my_file' 
3

Bạn có thể sử dụng ... để chỉ ra một yếu tố lặp lại và [ ] để cho biết rằng nó là không bắt buộc:

my_program [comment]... 

Điều này cho thấy comment là tùy chọn và có thể được lặp đi lặp lại.

+0

Nhưng bỏ qua phần '--comment': Trong trường hợp của tôi, tôi có các đối số vị trí cần thiết khác, và điều này sẽ khó phân biệt và có thể mơ hồ. (ví dụ: tôi muốn './myprog.py --comment" ASDF "--comment" QWERTY "my_file') – Thanatos

Các vấn đề liên quan