Python

Python Standard Library – argparse

argparse là thư viện Python dùng để xử lý các tham số được truyền vào command-line.

argparse có các method cơ bản sau: ArgumentParser(), add_argument(), parse_args(). Bây giờ chúng ta sẽ lần lượt tìm hiểu các method này.

+ method ArgumentParser() – dùng để tạo một instance argparse.


import argparse

ap = argparse.ArgumentParser()

+ method add_argument() – xác định cách các tham số được xử lý.

Example:


import argparse

ap = argparse.ArgumentParser()

ap.add_argument("name")

args = vars(ap.parse_args())

print args["name"]

Output:
$ python example-2.py NTPPRO

>> NTPPRO

Method add_argument() có các tham số quan trọng sau:

  • name or flags: đây là tham số đầu tiên được truyền vào method. Gồm optional và positional argument. Optional argument được qui định bởi ‘-f’ (short optional argument) hoặc ‘- -foo’ (long optional argument) và là tham số không bắt buộc. Positional argument bởi ‘name’ hoặc ‘path’ và là tham số bắt buộc
  • type – kiểu dữ liệu mà  command-line argument cần được chuyển đổi thành (int, float,…).
  • default – giá trị mặc định nếu tham số bị bỏ qua.
  • required=True – (optional)  quy định argument được add vào là tham số bắt buộc, kể cả optional argument;
  • help: chứa nội dung được in ra khi dùng lệnh -h hoặc – -help. (optional)
  • destkeyword dùng để tham khảo đến đối số được truyền vào thay cho default keyword lấy từ “name or flags“. (optional)

+ method parse_args(): chuyển các tham số của command-line thành các object và gán nó như các attributes của namespace. Có thể được chuyển thành kiểu Dictionary với hàm vars([object]).

Example:


import argparse

ap = argparse.ArgumentParser()

ap.add_argument("name")

ap.add_argument("-age")

args = vars(ap.parse_args())

print args["name"]

print args["age"]

Output:
$ python example-3.py CristianoRonaldo -age 30

>>> CristianoRonaldo
>>> 30

Như đã thấy trong ví dụ trên, tham số optional cần phải đi kèm với flag -age của nó, còn tham số positional thì không. Tuy nhiên cần chú ý rằng, các tham số positional cần phải được cung cấp theo thứ tự đã khai báo trong các method add_argument().

Để biết được cú pháp của các tham số, ta có thể làm như sau:

$ python example-3.py -h

>>> usage: example-3.py [-h] [-age AGE] name

Với kết quả nhận được, ta biết rằng flag -age sẽ đi kèm với từ khóa age còn name là positional argument.

Nói thêm về keyword khi truy cập vào tham số, đối với positional argument, keyword chính là tham số đầu tiên được truyền vào method add_argument(), đối với optional argument, keyword chính là ‘first long optional argument (- -foo)’, nếu không có long optional argument, keyword sẽ là ‘first short optional argument (-f)’.

Thêm một ví dụ nữa để hiểu rõ hơn cách hoạt động của optional argument:


import argparse

ap = argparse.ArgumentParser()

ap.add_argument("-n", "--name")

ap.add_argument("-a", "--age")

ap.add_argument("-x", "-sex")

args = vars(ap.parse_args())

print args["name"]

print args["age"]

print args["sex"]

Bây giờ chúng ta sẽ xem cú pháp của các argument này là gì


python example-4.py -h

>>> usage: example-4.py [-h] [-a AGE] [-n NAME] [-x X]

>>> optional arguments:

>>> -h, --help        show this help message and exit

>>> -a AGE, --age AGE

>>> -n NAME, --name NAME

>>> -x X, -sex X

Chạy chương trình xem nào:

$ python example-4.py -n NTPPRO –age 30 -x Male

>>> NTPPRO
>>> 30
>>> KeyError: ‘sex’

Trong ví dụ trên ta có thể thấy rằng flags -n– -name được liên kết với nhau và name chính là keyword, chúng ta có thể sử dụng hoặc flag -n hoặc flag – -name để truyền tham số và sử dụng keyword name để truy cập vào tham số đó (tương tự đối với flag -a và –age).

Tuy nhiên đối với dòng 6, flag -x-sex tuy vẫn được liên kết với nhau nhưng keyword không phải là sex mà lại là x, vì vậy để truy cập vào tham số này ta cần dùng keyword x. Tại sao lại như thế? Vì cả -x-sex đều là short optional argument, nên x sẽ được chọn là keyword.

Trong thực tế, để đơn giản và dễ dàng khi sử dụng command-line, ta sẽ gọi method add_argument với hai flag, ví dụ: -n– -name, trong đó: -n được dùng để truyền tham số vào và name được dùng như keyword truy cập vào tham số đó.

Tham khảo:
[1] Parser for command-line options, arguments and sub-commands.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s