15 เมษายน 2558

Published เมษายน 15, 2558 by with 0 comment

อาร์กิวเมนต์ใน Python

สวัสดีผู้อ่านทุกท่าน บทความนี้จะพาผู้อ่านไปทำอาร์กิวเมนต์ใน Python กันครับ

ในการทำอาร์กิวเมนต์ใน Python เราสามารถใช้โมดูลมาตรฐานของ Python ได้ นั้นคือ โมดูล argparse

โมดูล argparse เป็นโมดูลที่ช่วยให้ขียนส่วนรับอาร์กิวเมนต์ของโปรแกรมได้
โมดูล argparse นี้เพิ่งมีใน Python 2.7 กับ Python 3.2 ขึ้นมาครับ
เริ่มต้นไปกับตัวอย่างง่าย ๆ กันครับ
ไฟล์ prog.py

[python]
import argparse
parser = argparse.ArgumentParser()
parser.parse_args()
[/python]

เมื่อลองเรียกใช้งาน
$ python3 prog.py
$ python3 prog.py --help
usage: prog.py [-h]

optional arguments:
-h, --help show this help message and exit
$ python3 prog.py --verbose
usage: prog.py [-h]
prog.py: error: unrecognized arguments: --verbose
$ python3 prog.py foo
usage: prog.py [-h]
prog.py: error: unrecognized arguments: foo

จะเห็นได้ว่า

  • เมื่อเราเรียก $ python3 prog.py เฉย ๆ ไม่มีอะไรขึ้นมาเพราะเราไม่ได้กำหนดคำสั่งอาร์กิวเมนต์ไว้

  • เมื่อเรียก $ python3 prog.py --help เป็นคำสั่งสำหรับช่วยแนะนำคำสั่งอาร์กิวเมนต์ของไฟล์ แต่เราไม่ได้กำหนดคำสั่งอาร์กิวเมนต์ไว้

  • เมื่อเรียก --verbose และ foo ไม่สามารถทำงานได้เพราะเราไม่ได้กำหนดคำสั่งอาร์กิวเมนต์ไว้


ตัวย่างต่อมาให้เปิดไฟล์ prog.py แล้วแก้ไขโค้ดดังนี้

[python]
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo")
args = parser.parse_args()
print(args.echo)
[/python]

เมื่อรันโค้ด
$ python3 prog.py
usage: prog.py [-h] echo
prog.py: error: the following arguments are required: echo
$ python3 prog.py --help
usage: prog.py [-h] echo

positional arguments:
echo

optional arguments:
-h, --help show this help message and exit
$ python3 prog.py foo
foo

จะเห็นได้ว่า

  • จากคำสั่ง --help มีคำสั่ง echo เป็นอาร์กิวเมนต์ขึ้นมาในไฟล์ คำสั่ง add_argument() ในไฟล์ prog.py เป็นคำสั่่งเพิ่มอาร์กิวเมนต์ครับ

  • คำสั่ง parse_args() เป็นคำสั่งสำหรับคืนค่าข้อมูลที่ได้จากอาร์กิวเมนต์ แล้วจากโค้ดจะพบว่า ผมกำหนดตัวแปร args แทนคำสั่งนี้

  • คำสั่ง print(args.echo) เป็นคำสั่งแสดงข้อมูลที่ได้คำสั่งอาร์กิวเมนต์ echo ครับ


จากคำสั่ง --help เราสามารถเพิ่มคำบรรยายการใช้งานอาร์กิวเมนต์ได้ตามนี้ครับ

[python]
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo", help="echo the string you use here")
args = parser.parse_args()
print(args.echo)
[/python]

เมื่อเรียกใช้งาน
$ python3 prog.py -h
usage: prog.py [-h] echo

positional arguments:
echo echo the string you use here

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

รับข้อมูลจากอาร์กิวเมนต์
ในการรับข้อมูลจากอาร์กิวเมนต์ เราต้องกำหนดชนิดข้อมูลที่อนุญาตให้รับเข้ามาในอาร์กิวเมนต์ของโปรแกรม เพราะปกติแล้ว Python จะรับข้อมูลจากอาร์กิวเมนต์เป็น str อาจจะรับข้อมูลชนิดอื่น ๆ เช่น int เป็นต้น ต้องกำหนดชนิดข้อมูลด้วยครับ สามารถทำได้ดังนี้
ไฟล์ prog.py

[python]
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number",type=int) #คำสั่ง type กำหนดชนิดข้อมูลให้กับอาร์กิวเมนต์
args = parser.parse_args()
print(args.square**2)
[/python]

เมื่อเรียกใช้งาน
$ python3 prog.py 4
16
$ python3 prog.py four
usage: prog.py [-h] square
prog.py: error: argument square: invalid int value: 'four'

อาร์กิวเมนต์ตัวเลือก
หลังจากที่เราลองสร้าง อาร์กิวเมนต์กันมาแล้ว คราวนี้เราจะไปสร้างอาร์กิวเมนต์ตัวเลือกกันครับ
ไฟล์ prog.py

[python]
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbose", help="increase output verbosity",action="store_true")
args = parser.parse_args()
if args.verbose:
print("verbosity turned on")
[/python]

เมื่อเรียกใช้งาน
$ python3 prog.py --verbose
verbosity turned on
$ python3 prog.py --verbose 1
usage: prog.py [-h] [--verbose]
prog.py: error: unrecognized arguments: 1
$ python3 prog.py --help
usage: prog.py [-h] [--verbose]
optional arguments:
-h, --help show this help message and exit
--verbose increase output verbosity

ตรง action="store_true" เป็นการกำหนดค่า True False โดยถ้ามีการเรียกใช้ อาร์กิวเมนต์นั้นให้ค่า True
คำสั่ง verbose ใน if คอยเช็คถ้าเป็น True ให้ทำตามที่กำหนดครับ
จัดเรียงคำสั่งอาร์กิวเมนต์
เราสามารถจัดเรียงคำสั่งอาร์กิวเมนต์มากกว่าหนึ่ง หากอาร์กิวเมนต์นั้นใช้ชนิดข้อมูลเดียวกันและค่าอื่น ๆ เหมือนกัน สามารถได้ตามนี้ง่าย ๆ ครับ

ไฟล์ prog.py

[python]
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbose", help="increase output verbosity",action="store_true") #เพิ่มอาร์กิวเมนต์เข้าไปเพิ่ม
args = parser.parse_args()
if args.verbose:
print("verbosity turned on")
[/python]

เมื่อเรียกใช้งาน
$ python3 prog.py -v
verbosity turned on
$ python3 prog.py --help
usage: prog.py [-h] [-v]
optional arguments:
-h, --help show this help message and exit
-v, --verbose increase output verbosity

เพิ่มอาร์กิวเมนต์เงื่อนไข
เราสามารถทำคำสั่งสำหรับเพิ่มอาร์กิวเมนต์เงื่อนไขในโปรแกรมได้สามารถทำได้ตามตัวอย่างดังนี้ครับ

[python]
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,help="display a square of a given number")
parser.add_argument("-v", "--verbose", action="store_true",help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbose:
print("the square of {} equals {}".format(args.square, answer))
else:
print(answer)
[/python]

เมื่อเรียกใช้งาน
$ python3 prog.py
usage: prog.py [-h] [-v] square
prog.py: error: the following arguments are required: square
$ python3 prog.py 4
16
$ python3 prog.py 4 --verbose
the square of 4 equals 16
$ python3 prog.py --verbose 4
the square of 4 equals 16

อ่านรายละเอียดการใช้งานโมดูล argparse เพิ่มเติมได้ที่ https://docs.python.org/3/library/argparse.html#module-argparse
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

0 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)