2013-12-15 18 views
16

Tôi phải viết một giao diện dòng lệnh và tôi đã thấy tôi có thể sử dụng docoptargparse.Python - Sự khác biệt giữa docopt và argparse

Tôi muốn biết sự khác biệt chính giữa hai điều đó để tôi có thể tạo ra một sự lựa chọn khai sáng.

Hãy tuân thủ các sự kiện. Tôi không muốn Wow. docopt. Rất đẹp. Rất hữu dụng.

+3

'argparse' nằm trong gói Python mặc định trong khi' docopt' là một mô-đun riêng biệt. –

Trả lời

10

Docopt phân tích cú pháp chuỗi tài liệu, trong khi argparse xây dựng phân tích cú pháp của nó bằng cách tạo một đối tượng đối tượng và thêm hành vi cho nó bằng các cuộc gọi hàm.

Ví dụ cho argparse:

parser = argparse.ArgumentParser() 
parser.add_argument("operation", help="mathematical operation that will be performed", 
    choices=['add', 'subtract', 'multiply', 'divide']) 
parser.add_argument("num1", help="the first number", type=int) 
parser.add_argument("num2", help="the second number", type=int) 
args = parser.parse_args() 

Ví dụ cho docopt:

"""Calculator using docopt 

Usage: 
    calc_docopt.py <operation> <num1> <num2> 
    calc_docopt.py (-h | --help) 

Arguments: 
    <operation> Math Operation 
    <num1>  First Number 
    <num2>  Second Number 

Options: 
    -h, --help  Show this screen. 

""" 
from docopt import docopt 

if __name__ == '__main__': 
    arguments = docopt(__doc__, version='Calculator with docopt') 
    print(arguments) 

Note, docopt sử dụng Usage:Options: phần cho phân tích cú pháp. Ở đây Arguments: chỉ được cung cấp để thuận tiện cho người dùng cuối.

+1

Sau một năm sử dụng, tôi nghĩ rằng đáng nói đến là vì docopt khá gần đây và không phải là một phần của lõi python, nó có thể không có sẵn trên các hệ thống cũ hơn. tức là, nó không có trên Debian Wheezy (nhưng là Jessie). – baldurmen

6

argparse nằm trong thư viện mặc định python, vì vậy điều này không thêm bất kỳ phụ thuộc bổ sung nào vào chương trình của bạn. Sự khác biệt chủ yếu là cách viết mã của bạn. Sử dụng argparse có thể thêm các móc cho các plugin để họ có thể thêm các nhóm riêng của họ vào chương trình của bạn. Ví dụ: flake8 sử dụng tính năng này.

docopt là mô-đun bên thứ ba cung cấp cách phân tích cú pháp đơn giản. Cá nhân tôi thích docopt vì tính đơn giản của nó, nhưng tôi không nói đó là cách tốt nhất để sử dụng trong mọi trường hợp. Trong tài liệu của họ, họ đề cập rằng sử dụng docopt có thể sử dụng nhiều kết hợp chuyển đối số hơn khi sử dụng argparse.

4

Các Tại sao trang cho Click:

http://click.pocoo.org/5/why/

có một sự so sánh tốt đẹp giữa argparse, docopt và nhấp vào bản thân.

Click là một tiện ích phân tích cú pháp dòng lệnh khác cho Python.

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