Belajar dengan membaca secara berurutan

sys dan argparse — Info Runtime dan Parsing Argumen

Pelajari modul Python sys dan argparse dari dasar. Mulai dari membaca info runtime dengan sys.path / sys.argv / sys.exit hingga membangun parser argumen terstruktur dengan argparse — semuanya praktik langsung.

Artikel ini menelusuri modul sys, yang memberimu akses ke runtime Python, dan modul argparse, yang menstrukturkan argumen command-line. Kamu akan membahas dasar-dasar sys.path / sys.argv / sys.exit, lalu lanjut mendefinisikan argumen dengan konversi tipe, nilai default, dan choices memakai ArgumentParser dari argparse.

Modul sys — Membaca Runtime Python

Modul sys adalah standard library yang memberimu akses ke informasi tentang proses Python yang sedang berjalan. Apa yang bisa diimpor (sys.path), apa yang dilewatkan dari command line (sys.argv), versi dan platform Python (sys.version / sys.platform), dan cara menghentikan proses (sys.exit) — informasi dan fungsi tentang Python itu sendiri semuanya ada di sini.

Empat Area yang Dicakup Modul sys
modul sysInfo runtimesys.pathsys.versionI/Osys.argvsys.stdoutTerminasisys.exitInfo Pythonsys.platform
sys menangani info runtime (path / version / platform), I/O (argv / stdout), dan terminasi proses (exit) semua di satu tempat. Library seperti argparse juga mengandalkan sys.argv di balik layar.
Atribut / FungsiTipeArti
sys.pathlist[str]Daftar folder tempat import mencari modul
sys.argvlist[str]Daftar argumen command-line yang dilewatkan
sys.versionstrString versi Python
sys.platformstrPengenal OS ('darwin' / 'linux' / 'win32', dll.)
sys.exit(code)functionHentikan proses dengan exit code yang diberikan
sys.stdoutTextIOStandard output. Tempat print menulis

`sys.path` adalah daftar folder yang dicari import untuk modul, dipindai berurutan dari atas. Dengan for p in sys.path: kamu bisa mencetak setiap folder yang terdaftar baris per baris. Di runtime Pyodide kamu akan melihat path seperti /lib/python312.zip / /lib/python3.12 / /lib/python3.12/lib-dynload / /lib/python3.12/site-packages, sedangkan instalasi Python biasa mendaftarkan folder standard library dan site-packages (tempat library yang dipasang via pip).

Tarik platform dan isi module search path dari modul sys dan tampilkan. Modul sys memberimu akses ke informasi tentang proses Python yang sedang berjalan.

① Impor modul sys

② Gunakan sys.platform untuk mencetak runtime dalam bentuk Platform: ◯◯

③ Lakukan loop for melalui sys.path dan cetak setiap entry di barisnya sendiri (ganti string kosong '' dengan label yang lebih jelas)

(Jika kodenya berjalan dengan benar, penjelasan akan muncul.)

Python Editor

Jalankan kode untuk melihat output

sys.platform adalah atribut yang mengembalikan pengenal OS sebagai string. Di runtime Pyodide browser ia menampilkan emscripten (di mesin nyata kamu akan melihat darwin (Mac) / win32 (Windows) / linux). Dipakai saat kamu perlu bercabang berdasarkan sistem operasi.

import sys

print("Platform:", sys.platform)
# Mac:     Platform: darwin
# Windows: Platform: win32
# Linux:   Platform: linux
# Browser: Platform: emscripten

sys.argv dan argparse — Menangani Argumen Command-Line

Di instalasi Python nyata, saat kamu menjalankan command seperti python script.py user_name 42, token-token mendarat di sys.argv sebagai list of strings. sys.argv[0] adalah nama script, dan sys.argv[1:] berisi argumen yang kamu lewatkan. Modul argparse adalah standard library yang membaca sys.argv dan mengonversinya menjadi objek yang bisa kamu akses lewat atribut, membuatmu bisa mendeklarasikan konversi tipe, nilai default, dan pembatasan choice secara rapi.

Bagaimana Argumen Command-Line Mendarat di sys.argv
python script.pyuser_name 42argv[0]'script.py'argv[1]'user_name'argv[2]'42'
Setiap token di command line dilewatkan kiri-ke-kanan sebagai list ke dalam sys.argv. Entry pertama adalah nama script, jadi argumen sebenarnya mulai di sys.argv[1:].
# script.py (dimaksudkan untuk berjalan di instalasi Python nyata)
import sys

print(sys.argv)
# Contoh: menjalankan python script.py user_name 42 menghasilkan
# ['script.py', 'user_name', '42']

# Argumen sebenarnya mulai di [1:]
args = sys.argv[1:]
print(args)         # ['user_name', '42']

sys.argv pada dasarnya kosong di browser

Runtime browser yang dipakai seri ini sama sekali tidak punya command line, jadi sys.argv hanya berisi nilai tetap seperti ['<exec>']. Lihat perilaku mesin nyata di blok code di atas; di praktik langsung kamu akan menggantikannya dengan melewatkan list langsung sebagai pengganti sys.argv.

Begitu kamu mulai mengurai `sys.argv` secara manual, kamu langsung kena kebutuhan seperti mengonversi string ke angka, mendukung flag opsional, atau mencetak pesan usage dengan --help. Python menyertakan argparse sebagai standard library untuk menangani semua ini untukmu, dan alur dasarnya tiga langkah — buat ArgumentParser, daftarkan argumen yang ingin kamu terima dengan add_argument, lalu konversi mereka menjadi nilai dengan parse_args.

# Gaya Python mesin nyata
import argparse

parser = argparse.ArgumentParser(description="Product search CLI")
parser.add_argument("--keyword", required=True)         # lewatkan sebagai --keyword Apple
parser.add_argument("--limit", type=int, default=10)    # otomatis dikonversi ke int

args = parser.parse_args()                              # membaca sys.argv[1:]
print(args.keyword, args.limit)
Bagaimana argparse Memproses Argumen
sys.argv['--keyword', 'Apple','--limit', '5']ArgumentParser+ add_argumentparse_args()objek args.keyword / .limitparse
ArgumentParser mem-parse string command-line seperti --keyword Apple --limit 5 menjadi objek yang bisa kamu akses lewat atribut sebagai args.keyword / args.limit.

Di browser, pakai bentuk parse_args(list)

Karena runtime browser tidak punya sys.argv, memanggil parse_args() tanpa argumen melempar error. Pakai bentuk pelewatan list yang sama yang akan kamu pakai di tes — parse_args(["--keyword", "Apple", "--limit", "5"]). Di mesin nyata, menghilangkan list itu otomatis memakai sys.argv[1:].

Bangun parser argumen untuk product search CLI dengan argparse. Buat parser yang menerima dua opsi, --keyword dan --limit, lalu parse list argumen simulasi.

Di instalasi Python nyata, memanggil parse_args() tanpa argumen membaca dari sys.argv otomatis, tapi karena latihan ini berjalan di browser kamu akan melewatkan list ke parse_args() secara manual sebagai pengganti sys.argv.

① Impor argparse dan buat parser

② Daftarkan dua argumen --keyword dan --limit

③ Parse list ["--keyword", "Apple", "--limit", "5"] (karena browser tidak punya sys.argv asli, lewatkan list secara langsung)

④ Tarik keyword dan limit dari hasil parse dan cetak di satu baris, dipisahkan spasi

Python Editor

Jalankan kode untuk melihat output

argparse Lebih Dalam — Konversi Tipe, Default, Choices

add_argument punya beberapa opsi yang mengontrol bagaimana argumen berperilaku. Empat di antaranya mencakup hampir setiap use case CLI praktis.

OpsiEfekContoh
typeKonversi string yang diterima ke tipe laintype=int → '5' jadi 5
defaultNilai default saat argumen dihilangkandefault=10
requiredBuat wajib; error jika hilangrequired=True
choicesBatasi ke list nilai yang diizinkanchoices=['asc', 'desc']
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("--keyword", required=True)
parser.add_argument("--limit", type=int, default=10)
parser.add_argument("--order", choices=["asc", "desc"], default="asc")

args = parser.parse_args(["--keyword", "Apple", "--limit", "5", "--order", "desc"])
print(args.keyword, args.limit, args.order)
# -> Apple 5 desc

Menggabungkan type dan default

Saat kamu menentukan keduanya type=int, default=10, argumen mendapat 10 (int) saat dihilangkan, dan nilai yang dilewatkan dikonversi ke int saat diberikan. Nilai default tidak dijalankan lewat konversi tipe, jadi tulis default langsung dalam tipe target. Menulis default="10" akan memasukkan string "10" hanya saat argumen dihilangkan — bug yang halus.

Definisikan argumen untuk inventory search CLI, lengkap dengan konversi tipe, nilai default, dan choices. Konfirmasi bahwa menghilangkan --limit jatuh kembali ke default.

Di mesin nyata, parse_args() tanpa argumen membaca dari sys.argv otomatis, tapi karena kamu jalan di browser kamu akan melewatkan list argumen simulasi langsung.

① Impor argparse dan buat parser

② Daftarkan tiga argumen ini

- --keyword: required

- --limit: tipe integer, default 10

- --order: salah satu asc atau desc, default asc

③ Parse list yang setara dengan --keyword Banana --order desc (menghilangkan --limit)

④ Cetak ketiga nilai, keyword, limit, dan order, di satu baris dipisahkan spasi

Python Editor

Jalankan kode untuk melihat output

sys.exit — Mengembalikan Exit Code

sys.exit(code) adalah fungsi yang mengambil angka dan menghentikan proses. Secara konvensi, 0 berarti sukses dan nilai non-nol apa pun (biasanya 1) berarti gagal, dan sistem CI dan shell script bercabang berdasarkan nilai ini untuk memutuskan apa selanjutnya. Di balik layar, ia me-raise exception SystemExit. Kamu bisa menangkapnya dengan try / except, tapi biasanya kamu membiarkannya merambat supaya proses keluar.

import sys

price = -100

if price < 0:
    print("Error: harga negatif")
    sys.exit(1)         # tidak ada yang berjalan setelah titik ini

print("Lanjut...")  # hanya jalan saat price >= 0
Alur Terminasi Proses dengan sys.exit
sys.exit(0)SuksesExit code 0sys.exit(1)GagalExit code 1Tanpa panggilan sys.exitJalan sampai baris akhirExit code 0Shell pakai $?untuk cek exit code
sys.exit(0) memberi sinyal sukses dan sys.exit(1) memberi sinyal gagal ke pemanggil (shell atau CI). Di mesin nyata kamu bisa cek exit code dengan $? di shell. Jika kamu tidak memanggil sys.exit, script jalan sampai baris terakhir.

Tulis validasi inventaris dengan sys.exit. Saat jumlah stok negatif masuk, program harus gagal dan kode setelahnya tidak boleh berjalan.

① Impor sys

② Set jumlah stok ke -3 (untuk simulasi nilai buruk)

③ Jika stok negatif, cetak Error: stok negatif, lalu hentikan proses dengan exit code 1

④ Di luar if, cetak stok dalam bentuk Stock check OK: ◯◯ (ini tidak boleh jalan saat stok negatif)

Python Editor

Jalankan kode untuk melihat output
QUIZ

Cek Pemahaman

Jawab setiap pertanyaan satu per satu.

Soal 1Apa yang direpresentasikan sys.path?

Soal 2Manakah yang paling tepat menggambarkan sys.exit(1)?

Soal 3Saat kamu ingin mencoba argparse di browser, pendekatan mana yang bisa kamu pakai sebagai pengganti sys.argv?