Các argparse
tài liệu này là hợp lý tốt nhưng bỏ qua một vài chi tiết hữu ích có thể không rõ ràng. (@Diego Navarro đã đề cập đến một số điều này nhưng tôi sẽ cố gắng mở rộng câu trả lời của anh ấy một chút.) Cách sử dụng cơ bản như sau:
parser = argparse.ArgumentParser()
parser.add_argument('-f', '--my-foo', default='foobar')
parser.add_argument('-b', '--bar-value', default=3.14)
args = parser.parse_args()
Đối tượng bạn nhận được từ đó parse_args()
là một đối tượng 'Không gian tên': Một đối tượng có các biến thành viên được đặt tên theo các đối số dòng lệnh của bạn. Đối Namespace
tượng là cách bạn truy cập các đối số của mình và các giá trị được liên kết với chúng:
args = parser.parse_args()
print args.my_foo
print args.bar_value
(Lưu ý rằng argparse
thay thế '-' trong tên đối số của bạn bằng dấu gạch dưới khi đặt tên biến.)
Trong nhiều tình huống, bạn có thể muốn sử dụng các đối số chỉ đơn giản là các cờ không có giá trị. Bạn có thể thêm những người trong argparse như thế này:
parser.add_argument('--foo', action='store_true')
parser.add_argument('--no-foo', action='store_false')
Ở trên sẽ tạo các biến có tên 'foo' với giá trị True và 'no_foo' với giá trị false, tương ứng:
if (args.foo):
print "foo is true"
if (args.no_foo is False):
print "nofoo is false"
Cũng lưu ý rằng bạn có thể sử dụng tùy chọn "bắt buộc" khi thêm đối số:
parser.add_argument('-o', '--output', required=True)
Theo cách đó, nếu bạn bỏ qua đối số này tại dòng lệnh argparse
sẽ cho bạn biết nó bị thiếu và dừng thực thi tập lệnh của bạn.
Cuối cùng, lưu ý rằng có thể tạo cấu trúc chính tả cho các đối số của bạn bằng cách sử dụng vars
hàm, nếu điều đó làm cho cuộc sống của bạn dễ dàng hơn.
args = parser.parse_args()
argsdict = vars(args)
print argsdict['my_foo']
print argsdict['bar_value']
Như bạn có thể thấy, vars
trả về một dict với tên đối số của bạn là khóa và giá trị của chúng là, er, giá trị.
Có rất nhiều lựa chọn và những điều bạn có thể làm, nhưng điều này sẽ bao gồm các tình huống sử dụng phổ biến, thiết yếu nhất.
sys.argv
đối số bạn muốn ...