Lewati ke konten utama

Kuasai Modul argparse di Python: Bangun CLI yang Lebih Baik

Pelajari cara membangun antarmuka baris perintah (CLI) yang efektif di Python menggunakan modul argparse. Panduan ini memandu Anda melalui fitur dasar dan lanjutan, dengan contoh praktis dan tips untuk meningkatkan keterampilan pemrograman Anda.
· 12 mnt Baca

Jelajahi bersama AI

Python adalah bahasa pemrograman yang kuat yang memungkinkan pengembang membuat berbagai aplikasi, dari skrip dasar hingga sistem perangkat lunak berskala besar. Salah satu tugas pemrograman yang paling umum adalah membuat antarmuka baris perintah (CLI), yang memungkinkan pengguna berinteraksi dengan program melalui terminal atau command line. CLI sangat penting untuk penulisan skrip, otomasi, dan situasi di mana antarmuka grafis tidak praktis.

Menangani parameter baris perintah adalah bagian penting dari perancangan CLI. Argumen ini memungkinkan pengguna memengaruhi perilaku program dengan memberikan parameter masukan saat dijalankan. Tanpa kemampuan menilai faktor-faktor ini, program akan menjadi kurang fleksibel dan lebih sulit disesuaikan untuk tugas tertentu.

Python menyediakan beberapa modul untuk mem-parsing argumen baris perintah, namun modul argparse menonjol karena kesederhanaan dan kelengkapannya. Modul argparse memudahkan pengembangan antarmuka baris perintah yang fungsional. Modul ini secara otomatis menangani parsing parameter, menampilkan petunjuk yang membantu, dan memberikan kesalahan ketika pengguna memberikan informasi yang keliru.

Dalam tutorial ini, kita akan melihat cara menggunakan paket Python argparse. Kita akan mulai dengan ikhtisar antarmuka baris perintah Python dan pentingnya parsing masukan baris perintah. Lalu kita bahas modul argparse dan manfaatnya.

Gambaran Umum Antarmuka Baris Perintah di Python

Antarmuka baris perintah adalah program yang berjalan murni dengan perintah berbasis teks. Pengguna memasukkan perintah ke terminal atau command line, yang biasanya mencakup argumen dan opsi yang mengubah perilaku program. CLI bermanfaat karena mudah diotomasi dan diintegrasikan dengan teknologi lain.

Di Python, sebuah CLI dibuat dengan mengembangkan skrip yang menerima masukan baris perintah. Masukan ini biasanya disajikan sebagai daftar argumen yang dapat diakses dan ditafsirkan oleh skrip. Untuk program dasar, menangani argumen ini secara manual melalui daftar sys.argv mungkin sudah cukup. Namun, ketika kompleksitas program meningkat, memproses argumen secara manual menjadi tidak efisien dan rentan kesalahan.

Pentingnya Parsing Argumen Baris Perintah

Parsing argumen baris perintah diperlukan karena banyak alasan: 

  • Fleksibilitas: Dengan menerima parameter, sebuah program dapat melakukan banyak tugas atau bekerja pada set data yang berbeda tanpa mengubah kode. Pengguna dapat menentukan file yang akan diproses, mengonfigurasi pengaturan, dan memilih mode operasi.
  • Kebermanfaatan bagi pengguna: Parsing argumen yang tepat memungkinkan program menampilkan pesan yang berguna, memberi petunjuk cara menggunakan program, dan menangani kesalahan dengan baik.
  • Keterpeliharaan: Menggunakan modul parsing khusus seperti argparse membuat kode Anda lebih jelas dan mudah dipelihara. Ini memisahkan logika yang digunakan untuk mem-parsing argumen dari operasi utama program.

Pengenalan Modul argparse dan Manfaatnya

Modul argparse adalah bagian dari pustaka standar Python. Karena itu, modul ini dapat digunakan tanpa memasang paket tambahan apa pun. Modul ini menawarkan antarmuka yang lugas dan konsisten untuk parsing masukan command line. Beberapa keunggulan menggunakan argparse adalah:

  • Generasi bantuan otomatis: Menghasilkan pesan bantuan dan penggunaan berdasarkan argumen dalam kode.
  • Penanganan kesalahan: Menampilkan pesan kesalahan yang membantu saat pengguna memasukkan argumen tidak valid.
  • Konversi tipe: Dapat secara otomatis mengonversi string parameter ke tipe data yang sesuai.
  • Mendukung argumen posisi yang diperlukan dan argumen opsional dengan sederhana.
  • Nilai default: Memungkinkan Anda menyediakan nilai default untuk parameter yang tidak diberikan pengguna.

argparse memungkinkan pengembang fokus pada fungsionalitas utama program mereka sambil mengandalkan fondasi yang kuat untuk mengelola masukan baris perintah.

Menyiapkan argparse dan Penggunaan Dasar

Sekarang setelah kita membahas pentingnya parsing argumen baris perintah dan keunggulan menggunakan argparse, mari lihat cara menyiapkannya dan menggunakannya dalam skrip Python.

Menginstal dan mengimpor argparse

Tidak perlu memasang apa pun secara terpisah karena argparse adalah bagian dari pustaka standar Python. Anda dapat mengimpornya di awal skrip.

import argparse

Baris ini memuat modul argparse ke dalam skrip Anda, memungkinkan Anda menggunakan fungsinya untuk mem-parsing argumen baris perintah.

Membuat parser argumen sederhana

Langkah pertama dalam memanfaatkan argparse adalah membuat objek parser. Objek ini akan menyimpan informasi tentang argumen yang diterima program Anda dan mem-parsing masukan baris perintah.

parser = argparse.ArgumentParser(description='Process some integers.')

Dalam contoh ini, kita membuat objek ArgumentParser() dan menjelaskan programnya. Saat pengguna memilih opsi bantuan (-h atau --help), deskripsi ini akan ditampilkan.

Menambahkan argumen posisional dan opsional

Sekarang setelah kita membuat parser, kita dapat menentukan argumen yang akan diterima program kita.

Menambahkan argumen posisional

Argumen posisional bersifat wajib dan harus disajikan dalam urutan yang tepat. Misalnya, pertimbangkan skrip yang menambahkan dua angka. Kita dapat mendefinisikan dua argumen posisional untuk angka-angka tersebut:

parser.add_argument('num1', type=int, help='The first number to add.')
parser.add_argument('num2', type=int, help='The second number to add.')

Dalam kode ini, num1 dan num2 merujuk pada parameter posisional.

type=int menunjukkan bahwa parameter harus dikonversi ke bilangan bulat. Argumen help menentukan deskripsi yang akan muncul dalam pesan bantuan.

Menambahkan argumen opsional

Argumen opsional tidak wajib dan biasanya menyediakan opsi tambahan atau mengubah perilaku program. Biasanya diawali dengan satu atau dua tanda hubung. Kita akan menambahkan argumen opsional untuk mengaktifkan keluaran detail (verbose):

parser.add_argument('-v', '--verbose', action='store_true', help='Increase output verbosity.')

Berikut penjelasannya:

  • Opsi pendek adalah -v (misalnya, -v). --verbose adalah opsi panjang.
  • action='store_true' menunjukkan bahwa jika opsi dipilih, atribut verbose akan disetel ke True; jika tidak, akan bernilai False.
  • Argumen help menentukan deskripsi untuk pesan bantuan.

Mem-parsing argumen dan mengakses nilainya

Setelah menentukan semua argumen, kita perlu mem-parsing masukan baris perintah. Gunakan metode .parse_args() untuk melakukannya.

args = parser.parse_args()

Parameter yang telah di-parse sekarang disimpan dalam variabel args sebagai atribut. Kita dapat mengaksesnya menggunakan notasi titik.

result = args.num1 + args.num2
print('The sum of {} and {} is {}'.format(args.num1, args.num2, result))
if args.verbose:
    print('Verbose mode is enabled.')

Menggabungkan semuanya, berikut skrip lengkap yang menambahkan dua angka dan menyertakan mode verbose opsional:

import argparse
parser = argparse.ArgumentParser(description='Add two integers.')
parser.add_argument('num1', type=int, help='The first number to add.')
parser.add_argument('num2', type=int, help='The second number to add.')
parser.add_argument('-v', '--verbose', action='store_true', help='Increase output verbosity.')
args = parser.parse_args()
result = args.num1 + args.num2
print('The sum of {} and {} is {}'.format(args.num1, args.num2, result))
if args.verbose:
    print('Calculation completed successfully.')

Anda dapat menjalankan skrip ini dari command line dan memberikan argumen posisional yang diperlukan:

python add_numbers.py 3 5
The sum of 3 and 5 is 8

Jika Anda menyertakan opsi -v atau --verbose, skrip akan mencetak pesan verbose tambahan:

python add_numbers.py 3 5 --verbose
The sum of 3 and 5 is 8
Calculation completed successfully.

Jika pengguna menjalankan skrip dengan opsi -h atau --help, argparse akan menampilkan pesan bantuan yang dihasilkan secara otomatis:

python add_numbers.py -h
usage: add_numbers.py [-h] [-v] num1 num2
Add two integers.
positional arguments:
  num1           The first number to add.
  num2           The second number to add.
optional arguments:
  -h, --help     show this help message and exit
  -v, --verbose  Increase output verbosity.

Fitur ini membuat program Anda lebih ramah pengguna dengan memberikan petunjuk yang jelas tentang cara menggunakannya.

Penanganan Argumen Lanjutan

Saat mengembangkan program baris perintah di Python, Anda mungkin menemui skenario yang memerlukan parsing argumen yang lebih kompleks. Modul argparse Python mencakup beberapa fitur untuk memenuhi kebutuhan kompleks ini, memungkinkan Anda mengembangkan antarmuka yang fleksibel dan ramah pengguna.

Menggunakan nargs untuk banyak argumen

Ada situasi ketika aplikasi Anda perlu menerima banyak nilai untuk argumen yang sama. Misalnya, anggap Anda ingin membuat skrip yang memproses beberapa file sekaligus. Parameter nargs di argparse memungkinkan Anda menentukan berapa banyak argumen baris perintah yang harus dibaca.

Berikut cara menggunakan nargs untuk menerima banyak nama file:

import argparse
parser = argparse.ArgumentParser(description='Process multiple files.')
parser.add_argument('filenames', nargs='+', help='List of files to process.')
args = parser.parse_args()
for filename in args.filenames:
    print(f'Processing file: {filename}')
    # Add your file processing code here

Dalam kasus ini, nargs='+' menginstruksikan parser untuk mengharapkan satu atau lebih argumen pada filenames. Pengguna dapat memberikan sebanyak mungkin nama file yang diperlukan, dan semuanya akan disimpan dalam daftar bernama args.filenames.

Jika Anda ingin menerima jumlah argumen tertentu, tetapkan nargs ke angka tersebut. Misalnya, nargs=2 mengharuskan tepat dua parameter.

Menerapkan choices untuk membatasi nilai argumen

Terkadang, Anda ingin membatasi sebuah argumen ke rentang nilai valid yang ditentukan. Ini memastikan pengguna memberikan masukan yang valid, sehingga menghindari kesalahan atau tindakan tak terduga. Parameter choices memungkinkan Anda menentukan nilai yang diizinkan untuk sebuah argumen.

Pertimbangkan skrip yang menjalankan beberapa aktivitas tergantung pada mode yang dipilih pengguna.

import argparse
parser = argparse.ArgumentParser(description='Perform actions in different modes.')
parser.add_argument('--mode', choices=['backup', 'restore', 'delete'], required=True, help='Mode of operation.')
args = parser.parse_args()
if args.mode == 'backup':
    print('Backing up data...')
    # Backup code here
elif args.mode == 'restore':
    print('Restoring data...')
    # Restore code here
elif args.mode == 'delete':
    print('Deleting data...')
    # Delete code here

Dalam skrip ini, argumen --mode harus salah satu dari opsi tersebut. Jika pengguna memasukkan nilai yang tidak ada dalam daftar, argparse akan mengembalikan pesan kesalahan.

Menangani flag boolean dan toggle

Flag boolean adalah opsi yang mengaktifkan atau menonaktifkan fungsionalitas tertentu dalam aplikasi Anda. Biasanya didefinisikan tanpa nilai, hanya dengan menyertakan flag dalam perintah. Anda dapat menangani flag ini di argparse dengan parameter action.

Misalnya, mari tambahkan mode debug dalam sebuah skrip:

import argparse
parser = argparse.ArgumentParser(description='A script with debug mode.')
parser.add_argument('--debug', action='store_true', help='Enable debug output.')
args = parser.parse_args()
if args.debug:
    print('Debug mode is enabled.')
    # Additional debug information here
else:
    print('Debug mode is disabled.')

Dengan menggunakan action='store_true', flag --debug akan menetapkan args.debug menjadi True saat ada dan False jika tidak ada.

Menetapkan nilai default dan argumen wajib

Argumen opsional sering kali memiliki nilai default yang masuk akal. Ini berarti jika pengguna tidak menentukan argumen tersebut, aplikasi akan menggunakan nilai default. Argumen default memungkinkan Anda menentukan nilai default.

Berikut contohnya:

import argparse
parser = argparse.ArgumentParser(description='Adjust program settings.')
parser.add_argument('--timeout', type=int, default=30, help='Timeout in seconds.')
args = parser.parse_args()
print(f'Timeout is set to {args.timeout} seconds.')

Dalam skenario ini, jika pengguna tidak menentukan --timeout, defaultnya adalah 30 detik.

Untuk menjadikan argumen opsional bersifat wajib, set required=True.

import argparse
parser = argparse.ArgumentParser(description='Send a message.')
parser.add_argument('--recipient', required=True, help='Recipient of the message.')
args = parser.parse_args()
print(f'Sending message to {args.recipient}.')

Skrip sekarang akan mewajibkan argumen --recipient.

Kustomisasi Pesan Bantuan dan Kesalahan

Memberikan pesan yang jelas dan membantu kepada pengguna adalah komponen penting dalam mengembangkan program baris perintah yang efektif. Modul argparse Python secara otomatis membuat pesan bantuan, tetapi Anda dapat menyesuaikan pesan ini agar lebih sesuai dengan kebutuhan Anda.

Menghasilkan pesan bantuan otomatis

Secara default, argparse menghasilkan pesan bantuan, yang dapat diakses menggunakan opsi -h atau --help. Pesan ini berisi penggunaan program, deskripsi, dan informasi tentang setiap argumen.

Contohnya:

import argparse
parser = argparse.ArgumentParser(description='Calculate factorial of a number.')
parser.add_argument('number', type=int, help='The number to calculate the factorial for.')
args = parser.parse_args()

Saat pengguna menjalankan skrip dengan -h, mereka akan melihat:

usage: script.py [-h] number
Calculate factorial of a number.
positional arguments:
  number      The number to calculate the factorial for.
optional arguments:
  -h, --help  show this help message and exit

Pesan bantuan otomatis ini memberikan informasi yang berguna tanpa memerlukan upaya tambahan.

Menyesuaikan deskripsi bantuan dan pesan penggunaan

Meskipun pesan bantuan default berguna, Anda mungkin ingin mengubahnya untuk memberikan informasi tambahan atau menyesuaikannya dengan struktur tertentu. Anda dapat mengubah deskripsi, epilog, dan teks penggunaan di ArgumentParser.

Misalnya, untuk menyertakan epilog dan mempersonalisasi pesan penggunaan:

import argparse
parser = argparse.ArgumentParser(
    description='Convert temperatures between Celsius and Fahrenheit.',
    epilog='Enjoy using the temperature converter!',
    usage='%(prog)s [options] temperature')
parser.add_argument('temperature', type=float, help='Temperature value to convert.')
parser.add_argument('--to-fahrenheit', action='store_true', help='Convert Celsius to Fahrenheit.')
parser.add_argument('--to-celsius', action='store_true', help='Convert Fahrenheit to Celsius.')
args = parser.parse_args()

Sekarang, saat pengguna memeriksa pesan bantuan, pesan tersebut akan menyertakan deskripsi, penggunaan, dan epilog yang disesuaikan:

python file.py --help

usage: p.py [options] temperature

Convert temperatures between Celsius and Fahrenheit.

positional arguments:
  temperature      Temperature value to convert.

options:
  -h, --help       show this help message and exit
  --to-fahrenheit  Convert Celsius to Fahrenheit.
  --to-celsius     Convert Fahrenheit to Celsius.

Mengelola penanganan kesalahan dan umpan balik pengguna

Jika pengguna memasukkan argumen tidak valid, argparse akan menampilkan pesan kesalahan dan keluar dari program. Anda dapat memodifikasi perilaku ini untuk memberikan umpan balik yang lebih berguna atau menangani kegagalan secara berbeda.

Salah satu pendekatannya adalah menimpa metode error dalam subclass dari ArgumentParser:

import argparse
import sys
class CustomArgumentParser(argparse.ArgumentParser):
    def error(self, message):
        print(f'Error: {message}')
        self.print_help()
        sys.exit(2)
parser = CustomArgumentParser(description='Divide two numbers.')
parser.add_argument('numerator', type=float, help='The numerator.')
parser.add_argument('denominator', type=float, help='The denominator.')
args = parser.parse_args()
if args.denominator == 0:
    parser.error('Denominator cannot be zero.')
result = args.numerator / args.denominator
print(f'Result: {result}')

Jika pengguna mencoba membagi dengan nol dalam skrip ini, aplikasi akan menampilkan peringatan kesalahan dan teks bantuan, mengarahkan pengguna untuk memberikan data yang valid.

Python file.py 6 0
Error: Denominator cannot be zero.
usage: file.py [-h] numerator denominator
Divide two numbers.
positional arguments:
  numerator    The numerator.
  denominator  The denominator.
options:
  -h, --help   show this help message and exit

Anda juga dapat menyertakan penanganan kesalahan khusus dalam skrip Anda. Misalnya, untuk menangani path file yang tidak valid:

import argparse
import os
parser = argparse.ArgumentParser(description='Read a file and display its contents.')
parser.add_argument('filepath', help='Path to the file.')
args = parser.parse_args()
if not os.path.exists(args.filepath):
    parser.error(f"The file {args.filepath} does not exist.")
with open(args.filepath, 'r') as file:
    contents = file.read()
    print(contents)

Menjalankan skrip dengan path yang tidak valid akan menampilkan kesalahan berikut:

python app..py file
usage: p.py [-h] filepath
app.py: error: The file file does not exist.

Contoh dan Use Case Dunia Nyata

Memahami cara menggunakan modul argparse dalam lingkungan nyata akan memperjelas fungsionalitasnya. Mari lihat beberapa contoh penggunaan argparse dalam aplikasi dunia nyata.

Membangun kalkulator baris perintah

Anggap Anda perlu mengembangkan kalkulator sederhana yang dapat melakukan operasi aritmetika dasar dari command line. Kalkulator ini harus menerima dua angka dan sebuah operator untuk menjalankan perhitungan yang diminta.

Berikut cara mendekati tugas ini:

import argparse
parser = argparse.ArgumentParser(description='Simple command-line calculator.')
parser.add_argument('num1', type=float, help='First number.')
parser.add_argument('operator', choices=['+', '-', '*', '/'], help='Operation to perform.')
parser.add_argument('num2', type=float, help='Second number.')
args = parser.parse_args()
if args.operator == '+':
    result = args.num1 + args.num2
elif args.operator == '-':
    result = args.num1 - args.num2
elif args.operator == '*':
    result = args.num1 * args.num2
elif args.operator == '/':
    if args.num2 == 0:
        print('Error: Division by zero is not allowed.')
        exit(1)
    result = args.num1 / args.num2
print(f'The result is: {result}')

Dalam skrip ini, modul argparse digunakan untuk mendefinisikan tiga argumen posisional: dua angka dan sebuah operator. Argumen choices membatasi operator ke simbol aritmetika yang valid. Saat pengguna menjalankan skrip, mereka dapat melakukan perhitungan berikut:

python calculator.py 10 + 5
The result is: 15.0

Kalkulator dasar ini menunjukkan bagaimana opsi baris perintah dapat meningkatkan fleksibilitas dan interaktivitas program.

Membuat skrip pemrosesan file dengan banyak opsi

Anggap Anda memerlukan skrip yang memproses file teks dan menyediakan pilihan seperti menetapkan file keluaran, memilih mode pemrosesan, dan mengaktifkan keluaran verbose.

Berikut contoh cara menyiapkannya:

import argparse
parser = argparse.ArgumentParser(description='Process text files.')
parser.add_argument('input_file', help='Path to the input file.')
parser.add_argument('-o', '--output', help='Path to the output file.')
parser.add_argument('-m', '--mode', choices=['uppercase', 'lowercase'], default='uppercase', help='Processing mode.')
parser.add_argument('-v', '--verbose', action='store_true', help='Enable verbose output.')
args = parser.parse_args()
# Read the input file
with open(args.input_file, 'r') as file:
    content = file.read()
if args.verbose:
    print(f'Reading from {args.input_file}')
# Process the content
if args.mode == 'uppercase':
    processed_content = content.upper()
else:
    processed_content = content.lower()
if args.verbose:
    print('Processing content')
# Write to the output file or print to console
if args.output:
    with open(args.output, 'w') as file:
        file.write(processed_content)
    if args.verbose:
        print(f'Writing output to {args.output}')
else:
    print(processed_content)

Skrip ini menerima sebuah file masukan dan memiliki opsi untuk file keluaran, mode pemrosesan, dan keluaran verbose. Pengguna dapat menyesuaikan perilaku skrip tanpa mengubah kode.

python text_processor.py input.txt -o output.txt --mode lowercase -v
Reading from input.txt
Processing content
Writing output to output.txt

Mengembangkan alat CLI dengan subcommand

Dalam aplikasi yang lebih rumit, subcommand mungkin diperlukan, mirip dengan cara kerja git menggunakan perintah seperti git commit dan git push. Modul argparse menyediakan subparsers untuk tujuan ini.

Berikut cara membuat alat CLI dengan subcommand:

import argparse
parser = argparse.ArgumentParser(description='Manage tasks.')
subparsers = parser.add_subparsers(dest='command', required=True)
# Subcommand 'add'
parser_add = subparsers.add_parser('add', help='Add a new task.')
parser_add.add_argument('name', help='Name of the task.')
parser_add.add_argument('-p', '--priority', type=int, choices=range(1, 6), default=3, help='Priority of the task.')
# Subcommand 'list'
parser_list = subparsers.add_parser('list', help='List all tasks.')
parser_list.add_argument('-a', '--all', action='store_true', help='List all tasks, including completed ones.')
# Subcommand 'complete'
parser_complete = subparsers.add_parser('complete', help='Mark a task as completed.')
parser_complete.add_argument('task_id', type=int, help='ID of the task to complete.')
args = parser.parse_args()
if args.command == 'add':
    print(f"Adding task '{args.name}' with priority {args.priority}")
    # Code to add the task
elif args.command == 'list':
    print('Listing tasks')
    if args.all:
        print('Including completed tasks')
    # Code to list tasks
elif args.command == 'complete':
    print(f'Marking task {args.task_id} as completed')
    # Code to complete the task

Dalam contoh ini, skrip memiliki tiga subcommand: add, list, dan complete. Setiap subcommand memiliki argumennya sendiri. Saat pengguna menjalankan skrip, mereka memasukkan subcommand dan parameter lainnya.

Contohnya:

python task_manager.py add "Write report" -p 2
Adding task 'Write report' with priority 2

Mendaftar tugas

python task_manager.py list
Listing tasks

Menandai tugas sebagai selesai:

python task_manager.py complete 3
Marking task 3 as completed

subparsers memungkinkan Anda membuat alat command line yang kompleks namun tertata dan mudah diperluas, sehingga Anda dapat membangun aplikasi yang dapat melakukan banyak hal dalam satu antarmuka. 

Praktik Terbaik dan Tips Python argparse

Mengembangkan program baris perintah tidak hanya soal menulis kode yang berfungsi. Ini juga mencakup penulisan kode yang bersih, mudah dipelihara, dan ramah pengguna. 

Berikut beberapa praktik terbaik saat bekerja dengan modul argparse.

Mengorganisasi kode untuk keterbacaan dan pemeliharaan

Saat skrip Anda menjadi lebih kompleks, penting untuk menjaga kode tetap terorganisasi agar lebih mudah dipahami dan dipelihara. Salah satu pendekatannya adalah menggunakan fungsi dan kelas untuk mengelompokkan bagian-bagian kode yang berbeda. 

Memecah program menjadi bagian-bagian kecil yang dapat digunakan kembali membuatnya lebih mudah dikelola dan menghilangkan duplikasi kode.

Misalnya, dalam skrip manajemen tugas, Anda dapat mendefinisikan fungsi berbeda untuk menambahkan tugas, menampilkan daftar tugas, dan menyelesaikan tugas. Pemisahan ini memungkinkan Anda fokus pada satu aspek logika pada satu waktu, sehingga kode Anda lebih jelas.

Teknik efektif lainnya adalah memisahkan logika parsing argumen dari bagian kode lainnya. Menempatkan semua definisi argumen dan parsing di awal skrip, atau dalam fungsi khusus, memudahkan orang lain memahami bagaimana program Anda menangani masukan.

Menggunakan nama variabel yang tepat juga meningkatkan keterbacaan. Pilih nama variabel yang mencerminkan tujuannya, sehingga siapa pun yang melihat kode Anda dapat memahami apa yang terjadi. Menyertakan komentar dan docstrings untuk menjelaskan fungsi Anda dan detail penting lainnya juga dapat membantu meningkatkan pemahaman.

Menguji dan men-debug aplikasi baris perintah

Menguji aplikasi Anda sangat penting untuk memastikan fungsinya berjalan dengan baik dan mendeteksi kesalahan sejak dini. Menulis unit test dengan kerangka pengujian Python seperti unittest atau pytest adalah pendekatan yang sangat baik untuk menguji kode Anda. Pengujian ini memungkinkan Anda meniru berbagai masukan dan memastikan fungsi Anda bekerja dengan benar.

Misalnya, Anda dapat menguji berbagai skenario dengan memalsukan masukan baris perintah alih-alih menjalankan skrip dari command line. Strategi ini memungkinkan Anda memastikan bahwa parsing argumen bekerja sebagaimana mestinya dan aplikasi Anda menangani berbagai skenario dengan benar.

Menangani pengecualian dengan baik juga penting. Dengan menggunakan blok try-except, Anda dapat menangkap kesalahan dan menyampaikan pesan yang berguna kepada pengguna. Ini membuat aplikasi Anda lebih stabil dan ramah pengguna.

Pertimbangkan juga untuk menyertakan flag debug dalam skrip Anda. Flag ini dapat mengaktifkan keluaran tambahan yang membantu Anda melacak eksekusi program saat terjadi masalah. Memiliki opsi ini memudahkan diagnosis masalah selama pengembangan dan pemeliharaan.

Membandingkan argparse dengan pustaka parsing argumen lainnya

Meskipun argparse adalah utilitas berharga dalam pustaka standar Python, ada pustaka lain yang menyediakan pendekatan alternatif untuk parsing argumen baris perintah. Memahami opsi-opsi ini akan membantu Anda memilih alat yang tepat untuk proyek Anda.

Salah satu pustaka tersebut adalah Click. Click adalah paket pihak ketiga untuk membuat antarmuka baris perintah dengan dekorator. Sintaksnya lebih intuitif dan ideal untuk aplikasi yang canggih. Misalnya, Anda dapat menggunakan dekorator Python untuk membuat perintah dan opsi, sehingga kode Anda lebih ringkas dan mudah dipahami.

Docopt adalah opsi lain yang memungkinkan Anda mendefinisikan antarmuka baris perintah menggunakan docstring program. Docopt secara otomatis mem-parsing pesan bantuan dan membangun argument parser saat petunjuk penggunaan disertakan dalam docstring. Pendekatan ini elegan dan cocok untuk skrip sederhana yang memerlukan spesifikasi yang lebih mudah dibaca manusia.

Saat memilih pustaka yang akan digunakan, pertimbangkan kebutuhan proyek Anda. Jika Anda ingin menghilangkan dependensi eksternal dan menginginkan alat yang dapat menangani sebagian besar situasi, argparse adalah solusi yang sangat baik. Jika Anda menginginkan sintaks yang lebih intuitif dan sedang mengerjakan aplikasi yang kompleks, Click mungkin lebih cocok. Docopt adalah pilihan yang baik untuk program kecil dengan antarmuka yang sederhana.

Kesimpulan

Sepanjang artikel ini, kita telah melihat cara menggunakan modul argparse Python untuk mengembangkan program baris perintah di Python. Melalui contoh dunia nyata, kita mempelajari cara membuat skrip yang realistis yang menerima masukan pengguna dan menyelesaikan tugas yang relevan.

Dari merancang kalkulator sederhana hingga mengembangkan alat manajemen tugas dengan subcommand, modul argparse menyediakan fleksibilitas yang diperlukan untuk menangani berbagai situasi. Anda dapat merancang aplikasi yang andal dan mudah dipelihara dengan mematuhi praktik terbaik seperti pengorganisasian kode, pengujian menyeluruh, dan mempertimbangkan pustaka alternatif.

Baik Anda mengotomasi aktivitas, menganalisis data, atau membuat alat yang rumit, memahami parsing argumen baris perintah meningkatkan kemampuan Anda merancang program Python yang efektif. Tingkatkan pengetahuan Python Anda hari ini dengan alur keterampilan Python Fundamentals kami.

FAQ Python argparse

Bagaimana cara membuat argumen opsional menjadi wajib di argparse?

Argumen opsional dalam argparse umumnya tidak diperlukan karena, sesuai definisi, bersifat opsional. Namun, mungkin ada kasus ketika Anda ingin argumen yang diawali dengan -- menjadi wajib. Untuk melakukannya, setel parameter required ke True saat menambahkan argumen.

Berikut cara melakukannya:

import argparse
parser = argparse.ArgumentParser(description='Process some data.')
parser.add_argument('--input', required=True, help='Path to the input file.')
args = parser.parse_args()
print(f'Input file: {args.input}')
Bagaimana cara menangani argumen yang saling eksklusif dengan argparse?

Terkadang Anda mungkin menemui argumen yang seharusnya tidak digunakan bersamaan. Misalnya, sebuah skrip dapat menerima --verbose atau --quiet, tetapi tidak keduanya sekaligus. Untuk menangani skenario ini, argparse mendukung definisi grup yang saling eksklusif (mutually exclusive).

Berikut cara menyiapkannya:

import argparse
parser = argparse.ArgumentParser(description='Process some data.')
group = parser.add_mutually_exclusive_group()
group.add_argument('--verbose', action='store_true', help='Enable verbose output.')
group.add_argument('--quiet', action='store_true', help='Enable quiet mode.')
args = parser.parse_args()
if args.verbose:
    print('Verbose mode is on.')
elif args.quiet:
    print('Quiet mode is on.')
else:
    print('Default mode is on.')

Skrip ini memungkinkan pengguna mengaktifkan salah satu mode verbose atau quiet, tetapi tidak keduanya. Jika mereka mencoba menggunakan kedua opsi secara bersamaan, argparse akan memunculkan kesalahan.

Bagaimana cara menggunakan argparse untuk membaca argumen dari file alih-alih dari command line?

Meskipun argparse ditujukan untuk parsing argumen baris perintah, Anda mungkin ingin membacanya dari sebuah file. Anda dapat melakukannya dengan membaca argumen dari file dan memberikannya ke metode parse_args() melalui parameter args.

Berikut contohnya.

import argparse
parser = argparse.ArgumentParser(description='Process some data.')
parser.add_argument('--input', help='Path to the input file.')
parser.add_argument('--output', help='Path to the output file.')
# Read arguments from a file
with open('args.txt', 'r') as file:
    file_args = file.read().split()
args = parser.parse_args(file_args)
print(f'Input file: {args.input}')
print(f'Output file: {args.output}')

Dalam kasus ini, file args.txt mungkin berisi:

--input data/input.txt --output data/output.txt

Skrip membaca parameter dari file, mengonversinya menjadi daftar, lalu memberikannya ke parse_args(). Ini memungkinkan Anda mengelola argumen dalam sebuah file alih-alih memasukkannya setiap kali.

Bagaimana cara menyesuaikan pesan bantuan di argparse untuk menampilkan nilai default?

Secara default, argparse tidak menampilkan nilai default parameter dalam pesan bantuan. Jika Anda ingin menyertakan nilai default dalam teks bantuan, ubah parameter help atau gunakan ArgumentDefaultsHelpFormatter.

Berikut cara menambahkan nilai default ke pesan bantuan:

import argparse
parser = argparse.ArgumentParser(
    description='Process some data.',
    formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('--timeout', type=int, default=60, help='Timeout in seconds.')
args = parser.parse_args()
print(f'Timeout is set to {args.timeout} seconds.')

Dengan ArgumentDefaultsHelpFormatter, pesan bantuan akan menampilkan nilai default untuk argumen --timeout:

usage: script.py [-h] [--timeout TIMEOUT]
Process some data.
optional arguments:
  -h, --help         show this help message and exit
  --timeout TIMEOUT  Timeout in seconds. (default: 60)

Ini memberikan informasi lebih kepada pengguna tentang pengaturan default program Anda.

Apa saja praktik terbaik untuk menguji aplikasi baris perintah yang menggunakan argparse?

Menguji aplikasi baris perintah bisa jadi menantang, tetapi ada cara untuk memudahkannya. Salah satu cara yang berguna adalah meniru argumen baris perintah menggunakan modul unittest.

Berikut contoh cara menguji skrip yang menggunakan argparse:

import unittest
import argparse
import sys
def create_parser():
    parser = argparse.ArgumentParser(description='Process some data.')
    parser.add_argument('--number', type=int, help='A number.')
    return parser
def main(args):
    parser = create_parser()
    parsed_args = parser.parse_args(args)
    if parsed_args.number is None:
        parser.error('No number provided.')
    result = parsed_args.number * 2
    return result
class TestMain(unittest.TestCase):
    def test_main_with_number(self):
        test_args = ['--number', '5']
        result = main(test_args)
        self.assertEqual(result, 10)
    def test_main_without_number(self):
        test_args = []
        with self.assertRaises(SystemExit):
            main(test_args)
if __name__ == '__main__':
    unittest.main()

Dalam skrip pengujian:

  • Metode create_parser() menginisialisasi argument parser.
  • Fungsi main() memproses argumen dan menjalankan logika utama.
  • Kelas TestMain menyediakan metode uji untuk meniru berbagai masukan baris perintah.
  • Pengujian memastikan program merespons sesuai harapan terhadap beragam masukan.

Strukturkan kode Anda untuk memisahkan pemrosesan argumen dan logika utama, sehingga lebih mudah menguji area berbeda dalam program Anda.

Topik

Terkait

blogs

Spaghetti Plot dan Jalur Badai

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026