Skip to content

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

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

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

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

import argparse
parser = argparse.ArgumentParser()
parser.parse_args()

เมื่อลองเรียกใช้งาน

$ 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 แล้วแก้ไขโค้ดดังนี้

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo")
args = parser.parse_args()
print(args.echo)

เมื่อรันโค้ด

$ 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 เราสามารถเพิ่มคำบรรยายการใช้งานอาร์กิวเมนต์ได้ตามนี้ครับ

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

เมื่อเรียกใช้งาน

$ 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

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)

เมื่อเรียกใช้งาน

$ 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

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")

เมื่อเรียกใช้งาน

$ 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

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")

เมื่อเรียกใช้งาน

$ 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

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

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)

เมื่อเรียกใช้งาน

$ 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
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

Published on Categories ไม่มีหมวดหมู่

About wannaphong

วรรณพงษ์ ภัททิยไพบูลย์ ผู้ดูแลเว็บ wannaphong.com และผู้เขียนบทความบล็อกนี้ นักศึกษาชั้นปีที่ 1 สาขาวิทยาการคอมพิวเตอร์และสารสนเทศ คณะวิทยาศาสตร์ประยุกต์และวิศวกรรมศาสตร์ มหาวิทยาลัยขอนแก่น วิทยาเขตหนองคาย

1 thought on “อาร์กิวเมนต์ใน Python

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องที่ต้องการถูกทำเครื่องหมาย *