ภาษาการเขียนโปรแกรมทุกภาษามีคุณสมบัติในการสร้างสคริปต์และเรียกใช้จากเทอร์มินัลหรือถูกเรียกโดยโปรแกรมอื่น เมื่อเรียกใช้สคริปต์ดังกล่าว เรามักจะต้องส่งต่ออาร์กิวเมนต์ที่จำเป็นสำหรับสคริปต์สำหรับฟังก์ชันต่างๆ ที่จะดำเนินการภายในสคริปต์ ในบทความนี้เราจะมาดูกันว่ามีวิธีใดบ้างในการส่งผ่านอาร์กิวเมนต์ไปยังสคริปต์หลาม
การใช้ sys.argv
นี่คือโมดูล inbuilt sys.argv สามารถประมวลผลอาร์กิวเมนต์ที่ส่งต่อด้วยสคริปต์ โดยค่าเริ่มต้น อาร์กิวเมนต์แรกที่พิจารณาที่ sys.argv[0] คือชื่อไฟล์ อาร์กิวเมนต์ที่เหลือจะถูกสร้างดัชนีเป็น 1,2 เป็นต้น ในตัวอย่างด้านล่าง เราจะเห็นว่าสคริปต์ใช้อาร์กิวเมนต์ที่ส่งผ่านไปยังสคริปต์อย่างไร
import sys print(sys.argv[0]) print("Hello ",sys.argv[1],", welcome!")
เราทำตามขั้นตอนด้านล่างเพื่อเรียกใช้สคริปต์ด้านบนและได้ผลลัพธ์ดังต่อไปนี้:
ในการเรียกใช้โค้ดข้างต้น ให้ไปที่หน้าต่างเทอร์มินัลแล้วเขียนคำสั่งที่แสดงด้านล่าง ที่นี่ชื่อของสคริปต์คือ args_demo.py เราส่งข้อโต้แย้งที่มีค่า Samantha ไปยังสคริปต์นี้
D:\Pythons\py3projects>python3 args_demo.py Samantha args_demo.py Hello Samantha welcome!
การใช้ getopt
นี่เป็นอีกแนวทางหนึ่งที่มีความยืดหยุ่นมากกว่าเมื่อเปรียบเทียบกับวิธีก่อนหน้า ที่นี่เราสามารถรวบรวมมูลค่าของอาร์กิวเมนต์และประมวลผลพร้อมกับการจัดการข้อผิดพลาดและข้อยกเว้น ในโปรแกรมด้านล่าง เราจะค้นหาผลคูณของตัวเลขสองตัวโดยรับอาร์กิวเมนต์และข้ามอาร์กิวเมนต์แรกซึ่งเป็นชื่อไฟล์ แน่นอนว่าโมดูล sys ก็ใช้ที่นี่เช่นกัน
ตัวอย่าง
import getopt import sys # Remove the first argument( the filename) all_args = sys.argv[1:] prod = 1 try: # Gather the arguments opts, arg = getopt.getopt(all_args, 'x:y:') # Should have exactly two options if len(opts) != 2: print ('usage: args_demo.py -x <first_value> -b <second_value>') else: # Iterate over the options and values for opt, arg_val in opts: prod *= int(arg_val) print('Product of the two numbers is {}'.format(prod)) except getopt.GetoptError: print ('usage: args_demo.py -a <first_value> -b <second_value>') sys.exit(2)
ผลลัพธ์
การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -
D:\Pythons\py3projects >python3 args_demo.py -x 3 -y 12 Product of the two numbers is 36 # Next Run D:\Pythons\py3projects >python3 args_demo.py usage: args_demo.py -x <first_value> -b <second_value>
การใช้ argparse
โมดูลนี้เป็นโมดูลที่ต้องการมากที่สุดในการจัดการกับการส่งผ่านอาร์กิวเมนต์ เนื่องจากข้อผิดพลาดและข้อยกเว้นได้รับการจัดการโดยโมดูลเองโดยไม่จำเป็นต้องมีบรรทัดโค้ดเพิ่มเติม เราต้องพูดถึงชื่อข้อความช่วยเหลือที่จำเป็นสำหรับทุกอาร์กิวเมนต์ที่เราจะใช้ จากนั้นใช้ชื่อของอาร์กิวเมนต์ในส่วนอื่นๆ ของโค้ด
ตัวอย่าง
import argparse # Construct an argument parser all_args = argparse.ArgumentParser() # Add arguments to the parser all_args.add_argument("-x", "--Value1", required=True, help="first Value") all_args.add_argument("-y", "--Value2", required=True, help="second Value") args = vars(all_args.parse_args()) # Find the product print("Product is {}".format(int(args['Value1']) * int(args['Value2'])))
ผลลัพธ์
การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -
D:\Pythons\py3projects>python3 args_demo.py -x 3 -y 21 Product is 63 # Next Run D:\Pythons\py3projects>python3 args_demo.py -x 3 -y usage: args_demo.py [-h] -x VALUE1 -y VALUE2 args_demo.py: error: argument -y/--Value2: expected one argument