ในส่วนนี้ เราจะพัฒนาส่วนต่อประสานบรรทัดคำสั่งโดยใช้ python แต่ก่อนจะลงลึกในโปรแกรม เรามาทำความเข้าใจบรรทัดคำสั่งกันก่อน
มีการใช้งานบรรทัดคำสั่งตั้งแต่มีโปรแกรมคอมพิวเตอร์และสร้างขึ้นจากคำสั่ง โปรแกรมบรรทัดคำสั่งคือโปรแกรมที่ทำงานจากเชลล์หรือจากบรรทัดคำสั่ง
ในขณะที่อินเทอร์เฟซบรรทัดคำสั่งมีอินเทอร์เฟซผู้ใช้ที่นำทางโดยการพิมพ์คำสั่งที่เทอร์มินัล เชลล์ หรือคอนโซล แทนการใช้เมาส์
อินเทอร์เฟซบรรทัดคำสั่ง (CLI) เริ่มต้นด้วยไฟล์เรียกทำงาน มีพารามิเตอร์ที่เราสามารถส่งผ่านไปยังสคริปต์ได้ขึ้นอยู่กับวิธีการพัฒนา เช่น:
-
ข้อโต้แย้ง :เราจำเป็นต้องจัดเตรียมพารามิเตอร์นี้ที่ส่งผ่านไปยังสคริปต์ ในกรณีที่เราไม่ได้จัดเตรียมไว้ CLI จะผ่านข้อผิดพลาด ตัวอย่างเช่น numpy เป็นอาร์กิวเมนต์ในคำสั่งนี้:pip installnumpy
-
ตัวเลือก :พารามิเตอร์ทางเลือกที่มาพร้อมกับชื่อและคู่ค่า เช่น:pip install django –cache-dir ./my-cache-dir โดยที่ –cache_dir เป็นพารามิเตอร์ตัวเลือก และค่า ./my-cache-dir ควรใช้เป็น ไดเรกทอรีแคช
-
ธง :พารามิเตอร์ทางเลือกอื่นที่บอกให้สคริปต์เปิดหรือปิดการทำงานบางอย่าง เช่น พารามิเตอร์ –help
Python มีแพ็คเกจ python หลายตัวเพื่อเขียนอินเตอร์เฟสบรรทัดคำสั่งเช่น 'คลิก' คลิกช่วยให้เราสร้างอินเทอร์เฟซบรรทัดคำสั่งด้วยโค้ดเพียงไม่กี่บรรทัด
ด้านล่างนี้เป็นโปรแกรมอินเตอร์เฟสบรรทัดคำสั่งโดยไม่ต้องใช้แพ็คเกจการคลิก การเขียนโปรแกรม CLI อาจไม่สวยงามเท่าโปรแกรมที่เราใช้ 'คลิก' เนื่องจาก 'คลิก' ช่วยให้คุณปฏิบัติตามหลักการ “อย่าทำซ้ำตัวเอง” (DRY)
อินเตอร์เฟสบรรทัดคำสั่งโดยไม่ต้องใช้แพ็คเกจการคลิก
import sys import random def do_work(): """ Function to handle command line usage""" args = sys.argv args = args[1:] # First element of args is the file name if len(args) == 0: print('You have not passed any commands in!') else: for a in args: if a == '--help': print('Basic command line program') print('Options:') print(' --help -> show this basic help menu.') print(' --monty -> show a Monty Python quote.') print(' --veg -> show a random vegetable') elif a == '--monty': print('He’s not the Messiah—he’s a very naughty boy') elif a == '--veg': print(random.choice(['Tomato','Reddis','Carrot', 'Potato', 'Turnip'])) else: print('Unrecognised argument.') if __name__ == '__main__': do_work()
ผลลัพธ์
c:\Python\Python361>python cli_interp1.py --monty He’s not the Messiah—he’s a very naughty boy c:\Python\Python361>python cli_interp1.py --help Basic command line program Options: --help -> show this basic help menu. --monty -> show a Monty Python quote. --veg -> show a random vegetable c:\Python\Python361>python cli_interp1.py --veg Tomato c:\Python\Python361>python cli_interp1.py --error Unrecognised argument.
ดังที่คุณเห็นในโปรแกรมด้านบน การเปลี่ยนชื่ออาร์กิวเมนต์ไม่ได้ให้ความยืดหยุ่นมากนัก
ด้านล่างนี้เป็นโปรแกรมเดียวกันที่ใช้ python click package เพื่อใช้งาน CLI
import click import random @click.command() @click.option('--monty', default=False, help='Show a Monty Python quote.') @click.option('--veg', default=False, help='Show a random vegetable.') def do_work(monty, veg): """ Basic Click example will follow your commands""" if monty: print('He’s not the Messiah—he’s a very naughty boy') if veg: print(random.choice(['Tomato','Reddis','Carrot', 'Potato', 'Turnip'])) if __name__ == '__main__': do_work()
ผลลัพธ์
c:\Python\Python361>python cli_interp2.py --help Usage: cli_interp2.py [OPTIONS] Basic Click example will follow your commands Options: --monty TEXT Show a Monty Python quote. --veg TEXT Show a random vegetable. --help Show this message and exit.
โปรแกรมด้านบนแสดงให้เห็นว่าเขียน CLI ได้ง่ายกว่ามากโดยใช้แพ็คเกจ 'คลิก' และประหยัดความพยายามของโปรแกรมเมอร์ได้มาก