2012-07-26 37 views
6

Khi sử dụng mô-đun argparse của Python, bạn có thể sử dụng parse_known_args() để phân tích cú pháp các đối số được biết đến.Python argparse: Hiển thị chế độ parse_known_args trong chuỗi sử dụng

Tuy nhiên, thực tế này không được biểu thị trong chuỗi sử dụng/trợ giúp. Tất nhiên tôi có thể đặt nó trong lĩnh vực description của trình phân tích cú pháp, nhưng tôi tự hỏi nếu có một cách tốt đẹp để bao gồm nó trong dòng sử dụng.

Điều tôi đang tìm kiếm là kết quả của ví dụ: usage: test [-h] ... thay vì usage: test [-h]

Trả lời

3

Tôi nghĩ bạn có thể làm điều này với sự kết hợp của format_usage() và thuộc tính ArgumentParser usage. Lưu ý rằng phần đó cho thấy cách sử dụng như một đối số từ khóa cho hàm tạo, tuy nhiên, kiểm tra the source cho usage cho thấy rằng bạn có thể truy cập nó sau khi xây dựng là parser.usage.

Tôi tưởng tượng giải pháp cuối cùng của bạn sẽ giống như thế:

parser = argparse.ArgumentParser() 
# Add arguments... 
usage = parser.format_usage() 
parser.usage = usage.rstrip() + ' ...\n' 
+2

Cảm ơn, gần như đã thực hiện công việc. Chuỗi sử dụng kết thúc bằng '\ n', do đó cần phải được quan tâm đầu tiên:' parser.usage = '% s ... \ n'% parser.format_usage(). Rstrip() ' – ThiefMaster

2

parse_known_args() là dành cho sự tiện lợi của các lập trình viên viết chương trình, không phải cái gì mà người dùng của chương trình cần phải lo lắng. Nếu bạn xác định chính xác các đối số dòng lệnh của mình, argparse sẽ cung cấp cho bạn một cái gì đó tương tự tự động:

>>> import argparse 
>>> p = argparse.ArgumentParser(prog='command') 
>>> x=p.add_argument("foo", nargs=argparse.REMAINDER) 
>>> p.parse_args(["--help"]) 
usage: command [-h] ... 

positional arguments: 
    foo 

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

Ah, thật không may phong cách 'foo [foo ...]' khá khó chịu đối với trường hợp của tôi vì nó thực sự là một đối số duy nhất có thể chứa dấu cách trong môi trường không có dấu ngoặc kép hoặc dấu gạch chéo ngược, tức là arg duy nhất có thể chứa dấu cách bằng cách hợp nhất nó với bất kỳ phi args nào. – ThiefMaster

+0

Ah, hãy thử 'nargs = argparse.REMAINDER'. Điều đó sẽ đặt bất kỳ đối số vị trí còn lại nào trong danh sách và đặt thuận tiện "..." vào chuỗi trợ giúp như bạn muốn. – chepner