python
2012-02-07 4259 views 68 likes 
68

Trong Python, tôi hiểu cách đối số int và str có thể được thêm vào tập lệnh.Đối số Boolean cho tập lệnh

parser=argparse.ArgumentParser(description="""Mydescription""") 
parser.add_argument('-l', type=str, default='info', help='String argument') 
parser.add_argument('-dt', type=int, default ='', help='int argument') 

Điều gì là cho booleans?

Về cơ bản, tôi muốn chuyển một lá cờ vào tập lệnh của mình để cho biết tập lệnh có thực hiện hành động cụ thể hay không.

+2

Có gì sai với action '= 'store_true ''? –

+0

Bạn muốn hành vi nào với boolean? (nói, với '-v true' và '-v false'?) – kennytm

Trả lời

133

Bạn có thể sử dụng action với store_true | store_false, hoặc bạn có thể sử dụng một int và cho phép đúc ngầm kiểm tra một giá trị boolean.

Sử dụng action, bạn sẽ không vượt qua đối số --foo=true--foo=false, bạn chỉ cần bao gồm nó nếu nó được đặt thành true.

python myProgram.py --foo 

Trong thực tế, tôi nghĩ rằng những gì bạn có thể muốn là

parser.add_argument('-b', action='store_true', default=False) 
+0

Điều đó thật hoàn hảo. Cảm ơn. – dublintech

+6

Tôi không tin 'default = False' là cần thiết. –

+19

@PaulDraper: Rõ ràng là tốt hơn là ngầm. – sberry

15
parser.add_argument('--foo', action='store_true') 
2
import distutils.util 
ARGP.add_argument('--on', '-o', type=distutils.util.strtobool, default='true') 

Ví dụ gọi đó là:

$ ./myscript    # argp.on = 1 
$ ./myscript --on=false  # argp.on = 0 
$ ./myscript --on=False  # argp.on = 0 
$ ./myscript --on=0   # argp.on = 0 
$ ./myscript --on=1   # argp.on = 1 
$ ./myscript -o0   # argp.on = 0 
$ ./myscript -o false  # argp.on == 0 

tôi nên đề cập đến, bạn có thể ràng buộc đối số đến một wrapper địa phương cũng vậy, để xử lý một số kết hợp chuỗi chính xác khác nếu bạn muốn hỗ trợ các giá trị như "có" và "không". bạn cũng có thể thử giải thích đầu vào là yaml, có thể xử lý có/không. tôi đã không làm điều này trong một thời gian mặc dù, và tôi nghĩ rằng thời gian gần đây tôi đã hút luận để loại trừ lẫn nhau với cùng một giá trị dest, một --no-option với action='store_false', và một --option với action='store_true'

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