วิธีแยกวิเคราะห์อาร์กิวเมนต์บนบรรทัดคำสั่งใน Python

How Parse Arguments Command Line Python



อาร์กิวเมนต์บรรทัดคำสั่งใช้เพื่อส่งข้อมูลในโปรแกรมในขณะที่ดำเนินการโปรแกรม คุณลักษณะนี้มีให้ในภาษาโปรแกรมยอดนิยมส่วนใหญ่ แต่การประมวลผลอาร์กิวเมนต์บรรทัดคำสั่งจะแตกต่างกันสำหรับภาษาต่างๆ ค่าอาร์กิวเมนต์จะได้รับพร้อมกับชื่อโปรแกรมในขณะที่รันโปรแกรม ภาษา Python รองรับคุณสมบัตินี้ วิธีแยกวิเคราะห์อาร์กิวเมนต์บรรทัดคำสั่งในสคริปต์ Python แสดงในบทความนี้

การแยกวิเคราะห์อาร์กิวเมนต์บรรทัดคำสั่งโดยใช้ sys โมดูล

อาร์กิวเมนต์บรรทัดคำสั่งจะถูกเก็บไว้ในรายการโดยใช้ sys โมดูล. sys.argv ใช้เพื่ออ่านค่าของอาร์กิวเมนต์บรรทัดคำสั่ง สามารถนับจำนวนอาร์กิวเมนต์บรรทัดคำสั่งทั้งหมดได้โดยใช้ เลน () การทำงาน. การใช้โมดูลนี้มีอธิบายไว้ในส่วนของบทความ







ตัวอย่างที่ 1: การอ่านจำนวนอาร์กิวเมนต์และค่าอาร์กิวเมนต์

สร้างไฟล์ด้วยสคริปต์ python ต่อไปนี้ ที่นี่ ค่าอาร์กิวเมนต์บรรทัดคำสั่งจะถูกเก็บไว้ในตัวแปร argv เช่นเดียวกับภาษาอื่นๆ เลน () วิธีการนับจำนวนอาร์กิวเมนต์ทั้งหมดที่ส่งผ่านในขณะที่ดำเนินการสคริปต์ ค่าอาร์กิวเมนต์จะพิมพ์เป็นอาร์เรย์ที่ส่วนท้ายของสคริปต์



# นำเข้าโมดูล sys
นำเข้า sys

# พิมพ์จำนวนอาร์กิวเมนต์ทั้งหมด
พิมพ์('ข้อโต้แย้งทั้งหมด:', เลน(sys.argv))
พิมพ์('ค่าอาร์กิวเมนต์คือ:', NS(sys.argv))

เอาท์พุท:



สคริปต์ข้างต้นดำเนินการที่นี่โดยใช้อาร์กิวเมนต์บรรทัดคำสั่งสี่รายการ อาร์กิวเมนต์แรกคือชื่อสคริปต์และอื่น ๆ เป็นค่าตัวเลข ผลลัพธ์ต่อไปนี้จะปรากฏขึ้นหลังจากรันสคริปต์





ตัวอย่างที่ 2: การอ่านค่าอาร์กิวเมนต์โดยใช้ลูป



ในตัวอย่างก่อนหน้านี้ ค่าอาร์กิวเมนต์จะถูกพิมพ์เป็นอาร์เรย์ สร้างไฟล์ด้วยสคริปต์ต่อไปนี้เพื่อพิมพ์ชนิดของตัวแปรอาร์กิวเมนต์และพิมพ์ค่าอาร์กิวเมนต์แต่ละค่าในแต่ละบรรทัดโดยใช้ for loop

# นำเข้าโมดูล sys
นำเข้า sys

# พิมพ์ประเภทของตัวแปร sys.argv
พิมพ์(พิมพ์(sys.argv))

# พิมพ์อาร์กิวเมนต์บรรทัดคำสั่งในแต่ละบรรทัด
พิมพ์('อาร์กิวเมนต์บรรทัดคำสั่งคือ:')
สำหรับผมใน sys.argv:
พิมพ์(ผม)

เอาท์พุท:

สคริปต์ข้างต้นดำเนินการโดยระบุอาร์กิวเมนต์สามชื่อพร้อมชื่อสคริปต์ ผลลัพธ์ต่อไปนี้จะปรากฏขึ้นหลังจากรันสคริปต์

การแยกวิเคราะห์อาร์กิวเมนต์บรรทัดคำสั่งโดยใช้ getopt module

ราดหน้า โมดูลใช้เพื่อแยกอาร์กิวเมนต์บรรทัดคำสั่งพร้อมตัวเลือก ราดหน้า () วิธีการของโมดูลนี้ใช้สำหรับอ่านอาร์กิวเมนต์ วิธีนี้มีสามอาร์กิวเมนต์ อาร์กิวเมนต์สองข้อแรกเป็นอาร์กิวเมนต์บังคับ และอาร์กิวเมนต์สุดท้ายเป็นทางเลือก การใช้อาร์กิวเมนต์เหล่านี้ได้รับด้านล่าง

อาร์กิวเมนต์: ประกอบด้วยอาร์กิวเมนต์ที่นำมาจากอาร์กิวเมนต์บรรทัดคำสั่ง

short_option: อาจเป็นจดหมายใดๆ ที่ส่งผ่านอาร์กิวเมนต์ก็ได้

long_option: ใช้เพื่อกำหนดตัวเลือกแบบยาวที่มีสองส่วน นี่คือชื่อตัวเลือกและค่าตัวเลือก

ไวยากรณ์: getopt.getopt(args, short_option, [long_option])

ตัวอย่างที่ 3: การอ่านค่าอาร์กิวเมนต์โดยใช้ตัวเลือก getopt แบบสั้น

ราดหน้า โมดูลมีคุณสมบัติมากกว่า sys โมดูล. ตัวอย่างต่อไปนี้แสดงให้เห็นว่าสามารถใช้ตัวเลือกสั้น ๆ ได้อย่างไร ราดหน้า () กระบวนการ. argv ตัวแปรจะเก็บอาร์กิวเมนต์บรรทัดคำสั่งโดยละเว้นชื่อสคริปต์ ถัดไป สองตัวเลือกถูกกำหนดใน ราดหน้า () เมธอดที่สามารถใช้กับอาร์กิวเมนต์ในขณะใช้งาน หากมีข้อผิดพลาดเกิดขึ้น ข้อความแสดงข้อผิดพลาดจะแสดงขึ้น

# นำเข้าโมดูล getopt
นำเข้า ราดหน้า

# นำเข้าโมดูล sys
นำเข้า sys

# ตัวแปรอาร์กิวเมนต์ Store ละเว้นชื่อสคริปต์
argv= sys.argv[1:]

ลอง:
# กำหนดตัวเลือกสั้น ๆ ของ getopt
ตัวเลือก,args= ราดหน้า.ราดหน้า(argv, 'x: ย:')

# พิมพ์ตัวเลือกและอาร์กิวเมนต์
พิมพ์(ตัวเลือก)
พิมพ์(args)

ยกเว้น ราดหน้า.GettopError:

# พิมพ์ข้อความแสดงข้อผิดพลาดหากมีการจัดเตรียมตัวเลือกที่ไม่ถูกต้อง
พิมพ์('ให้ตัวเลือกที่ไม่ถูกต้อง')

# ยุติสคริปต์
sys.ทางออก(2)

เอาท์พุท:

เรียกใช้สคริปต์โดยไม่มีอาร์กิวเมนต์ อาร์กิวเมนต์ที่มีตัวเลือกที่ถูกต้อง และอาร์กิวเมนต์ที่มีตัวเลือกที่ไม่ถูกต้อง

ตัวอย่างที่ 4: การอ่านค่าอาร์กิวเมนต์โดยใช้ตัวเลือก getopt แบบสั้นและแบบยาว

ตัวอย่างนี้แสดงให้เห็นว่าทั้งตัวเลือกสั้นและยาวสามารถใช้กับค่าอาร์กิวเมนต์ได้อย่างไร มันจะบวกตัวเลขสองตัวเมื่อ '-ถึง' หรือ '-เพิ่ม' จะใช้เป็นตัวเลือกและลบตัวเลขสองตัวเมื่อ ‘ -NS' หรือ ' –ย่อย’ จะใช้เป็นตัวเลือกในขณะใช้งาน

# นำเข้าโมดูล getopt
นำเข้า ราดหน้า

# นำเข้าโมดูล sys
นำเข้า sys

# ตัวแปรอาร์กิวเมนต์ Store ละเว้นชื่อสคริปต์
argv= sys.argv[1:]

# เริ่มต้นตัวแปรผลลัพธ์
ผลลัพธ์=0

ลอง:

# กำหนดตัวเลือก getopt สั้นและยาว
ตัวเลือก,args= ราดหน้า.ราดหน้า(sys.argv[1:], 'เช่น', ['เพิ่ม=','ย่อย='])

# อ่านแต่ละตัวเลือกโดยใช้ for loop
สำหรับเลือก,โกรธในตัวเลือก:
# คำนวณผลรวมหากตัวเลือกคือ -a หรือ --add
ถ้าเลือกใน ('-ถึง', '--เพิ่ม'):
ผลลัพธ์= int(argv[1])+int(argv[2])

# คำนวณการดูดกลืนถ้าตัวเลือกคือ -s หรือ --sub
เอลฟ์เลือกใน ('-NS', '-ย่อย'):
ผลลัพธ์= int(argv[1])-int(argv[2])

พิมพ์('ผลลัพธ์ = ',ผลลัพธ์)

ยกเว้น ราดหน้า.GettopError:

# พิมพ์ข้อความแสดงข้อผิดพลาดหากมีการจัดเตรียมตัวเลือกที่ไม่ถูกต้อง
พิมพ์('ให้ตัวเลือกที่ไม่ถูกต้อง')

# ยุติสคริปต์
sys.ทางออก(2)

เอาท์พุท:

เรียกใช้สคริปต์โดยไม่มีอาร์กิวเมนต์และตัวเลือก อาร์กิวเมนต์ด้วยตัวเลือก '-a' อาร์กิวเมนต์ด้วยตัวเลือก '-s' และอาร์กิวเมนต์ที่มีตัวเลือกที่ไม่ถูกต้อง

การแยกวิเคราะห์อาร์กิวเมนต์บรรทัดคำสั่งโดยใช้ argparse module

โมดูล Argparse มีตัวเลือกมากมายในการอ่านอาร์กิวเมนต์บรรทัดคำสั่ง โมดูลนี้สามารถจัดเตรียมค่าอาร์กิวเมนต์เริ่มต้น อาร์กิวเมนต์ที่มีชนิดข้อมูล อาร์กิวเมนต์ตำแหน่ง ข้อความช่วยเหลือ ฯลฯ

ตัวอย่างที่ 5: การอ่านอาร์กิวเมนต์บรรทัดคำสั่งโดยใช้argparse

ตัวอย่างต่อไปนี้แสดงการใช้ argparse โมดูลสำหรับอ่านอาร์กิวเมนต์บรรทัดคำสั่ง ที่นี่ สองตัวเลือกถูกกำหนดไว้สำหรับการอ่านอาร์กิวเมนต์บรรทัดคำสั่ง เหล่านี้คือ '-n' หรือ '–name' และ '-e' หรือ '-e-mail' หากผู้ใช้ระบุอาร์กิวเมนต์ที่ไม่ถูกต้อง ก็จะแสดงข้อผิดพลาดพร้อมข้อความการใช้งาน หากผู้ใช้ระบุตัวเลือกที่ถูกต้องพร้อมอาร์กิวเมนต์ จะแสดงค่าอาร์กิวเมนต์ หากผู้ใช้เรียกใช้สคริปต์ด้วยตัวเลือก '–help' จะมีข้อความที่จำเป็นในการเรียกใช้สคริปต์

# นำเข้าโมดูล argparse
นำเข้าargparse

# นำเข้าโมดูล sys
นำเข้า sys

# ประกาศฟังก์ชันเพื่อกำหนดอาร์กิวเมนต์บรรทัดคำสั่ง
defreadOptions(args=sys.argv[1:]):
พาร์เซอร์ =argparseArgumentParser(คำอธิบาย='รายการคำสั่งการแยกวิเคราะห์')
พาร์เซอร์.add_argument('-NS', '--ชื่อ', ช่วย='พิมพ์ชื่อของคุณ')
พาร์เซอร์.add_argument('-และ', '--อีเมล', ช่วย='พิมพ์อีเมลของคุณ')
opts= พาร์เซอร์.parse_args(args)
กลับopts

# เรียกใช้ฟังก์ชันเพื่ออ่านค่าอาร์กิวเมนต์
ตัวเลือก=readOptions(sys.argv[1:])
พิมพ์(ตัวเลือก.ชื่อ)
พิมพ์(ตัวเลือก.อีเมล)

เอาท์พุท:

เรียกใช้สคริปต์ด้วยตัวเลือกที่ไม่ถูกต้อง ตัวเลือกที่ถูกต้อง และตัวเลือกความช่วยเหลือ

บทสรุป:

วิธีต่างๆ ในการอ่านอาร์กิวเมนต์บรรทัดคำสั่งได้อธิบายไว้ในบทช่วยสอนนี้โดยใช้โมดูลหลามสามโมดูล ฉันหวังว่าบทช่วยสอนนี้จะช่วย coder ที่ต้องการอ่านข้อมูลโดยใช้อาร์กิวเมนต์บรรทัดคำสั่งใน python

ดูวิดีโอของผู้เขียน: ที่นี่