2013-06-06 41 views
5

Tôi muốn thực hiện các phân tích cú pháp như cmd [-a xxx -b xxx] -c xxx -d xxxargparse, hai đối số phụ thuộc vào nhau

Khi -a được sử dụng, tôi muốn -b được sử dụng quá. tương tự, nếu sử dụng -b, cũng phải sử dụng -a. Không sao cả -a-b không được sử dụng.

Tôi làm như thế nào? Tôi đã thử các hành động tùy chỉnh, nhưng nó không hoạt động tốt.

Trả lời

9

Argparse không thực sự hỗ trợ loại sử dụng này.

Điều hiệu quả nhất để làm là kiểm tra và xem những loại điều kiện được đáp ứng sau khi phân tích cú pháp:

import argparse 

parser = argparse.ArgumentParser() 
parser.add_argument('-b') 
parser.add_argument('-c') 

args = parser.parse_args() 

required_together = ('b','c') 

# args.b will be None if b is not provided 
if not all([getattr(args,x) for x in required_together]): 
    raise RuntimeError("Cannot supply -c without -b") 
+0

Cảm ơn giải pháp. – timchen

10

Một thiết kế tốt hơn là nên có một lựa chọn duy nhất mà hai đối số:

parser.add_argument('-a', nargs=2) 

Sau đó, bạn chỉ định tùy chọn có 2 đối số hoặc bạn không chỉ định nó.

$ script -a 1 2 

hoặc

$ script 

Một hành động tùy chỉnh (hoặc xử lý sau) có thể chia nhỏ các tuple args.a vào hai giá trị riêng biệt args.aargs.b.

+0

Cảm ơn, nó có vẻ là một ý tưởng tốt, cuối cùng tôi đã sử dụng nargs = 2 trong chương trình của tôi. – timchen

+1

Nó thực sự là 'nargs' không' narg' nhưng tôi không thể chỉnh sửa câu trả lời vì nó chỉ có 1 char – Leonardo