Python: Memakai argparse untuk memberikan argumen pada skrip

Pemrograman, Teknologi

You can read Using argparse to pass arguments into python script if you prefer this article in english translation.

Beberapa waktu yang lalu aku berhadapan dengan kasus menambah dan menghapus nama domain dari ratusan kategori file teks.

Berpikir kasus ini bakalan datang berulang-ulang, aku ambil keputusan bikin skrip python untuk menghemat waktu.

Sempat terinspirasi dari perintah linux: ls yang punya beberapa argumen dengan fungsi unik. Harapanku bahasa python juga punya library untuk bisa menerima lebih dari 1 masukan argumen.

Setelah riset di internet, aku temuin argparse bisa selesaikan masalah argumen masukan ini. Untuk praktiknya, setiap fungsi bisa memiliki argumen masukan terpisah.

Berikut adalah contoh implementasinya.

Fitur program:

  1. Menerima help sebagai argumen untuk menampilkan bantuan
  2. Menerima argumen add untuk menambah nama domain dalam file teks
  3. Menerima argumen delete untuk menghapus nama domain dari file teks

Langkah 1: Membuat parseargumen

Buat file python baru dan simpan sebagai argparse_example.py

import argparse

def process_argument():
    parser = argparse.ArgumentParser(description=r"Script to expedite QA process with 2 functions as described below.")

# TODO : Create sub parser for each function menus

# TODO : Get arguments on main program

Tujuan dari komentar TODO adalah sebagai kerangka program. Di langkah-langkah selanjutnya akan dihapus.

Langkah 2: Membuat subparser untuk setiap fungsi

import argparse

def process_argument():
    parser = argparse.ArgumentParser(description=r"Script to expedite QA process with 2 functions as described below.")

    subparsers = parser.add_subparsers(dest='options', help='choose script action')

    add_parser = subparsers.add_parser('add', help='adding domains to destination category')
    add_parser.add_argument('-n', '--domain_name', action='store', help='Store a domain value')
    add_parser.add_argument('-d', '--destination_category', action='store', help='file path of destination domain')

    delete_parser = subparsers.add_parser('delete', help='deleting domains from source category')
    delete_parser.add_argument('-n', '--domain_name', action='store', help='Store a domain value')
    delete_parser.add_argument('-s', '--source_category', action='store', help='file path of source domain')

    try:
        return parser.parse_args()
    except IOError, msg:
        parser.error(str(msg))

# TODO : Get arguments on main program

Setiap subparser memiliki argumen masukan masing-masing dengan fungsi yang berbeda.

Step 3: Menerima argumen pada program utama

import argparse

def process_argument():
    parser = argparse.ArgumentParser(description=r"Script to expedite QA process with 2 functions as described below.")

    subparsers = parser.add_subparsers(dest='options', help='choose script action')

    add_parser = subparsers.add_parser('add', help='adding domains to destination category')
    add_parser.add_argument('-n', '--domain_name', action='store', help='Store a domain value')
    add_parser.add_argument('-d', '--destination_category', action='store', help='file path of destination domain')

    delete_parser = subparsers.add_parser('delete', help='deleting domains from source category')
    delete_parser.add_argument('-n', '--domain_name', action='store', help='Store a domain value')
    delete_parser.add_argument('-s', '--source_category', action='store', help='file path of source domain')

    try:
        return parser.parse_args()
    except IOError, msg:
        parser.error(str(msg))

def main():
    args = process_argument()

    if args.options == 'delete':
        print 'Deleting ' + args.domain_name + ' from ' + args.source_category + ' is succeeded.'
    elif args.options == 'add':
        print 'Adding ' + args.domain_name + ' on ' + args.destination_category + ' is succeeded.'

if __name__ == "__main__":
    main()

Untuk contoh kali ini, skrip hanya menampilkan pesan bahwa argumen telah berhasil diterima oleh program utama.

Hasil akhir

Jalankan program

Jalankan perintah bantuan global: python argparse_example.py -h

Jalankan perintah bantuan untuk setiap fungsi

Menampilkan bantuan untuk perintah menambah nama domain: python argparse_example.py add -h

Menampilkan bantuan untuk perintah menghapus nama domain: python argparse_example.py delete -h

Jalankan perintah untuk menambah nama domain: python argparse_example.py add -n testing.com -d someCategory

Jalankan perintah untuk menghapus nama domain: python argparse_example.py delete -n testing.com -s someCategory

Bacaan lebih lanjut

Konsep dasar:

  • https://pymotw.com/2/argparse/
  • http://tricksntweaks.blogspot.co.id/2013/05/advance-argument-parsing-in-python.html
  • https://mkaz.tech/python-argparse-cookbook.html

Konsep subparsing:

  • http://stackoverflow.com/questions/4575747/get-selected-subcommand-with-argparse
  • http://stackoverflow.com/questions/8250010/argparse-identify-which-subparser-was-used
  • http://www.prschmid.com/2013/07/parsing-arguments-in-python-with.html
  • http://tylerturk.com/argparse-with-custom-subparsing/

Satu pemikiran pada “Python: Memakai argparse untuk memberikan argumen pada skrip

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *