Pekerjaan di depan terminal sering kali berupa rutinitas berkas: mencari tahu berkas mana yang memakan ruang, menyalin laporan ke folder arsip, atau membereskan folder unduhan yang penuh sampah. Perintah bawaan sistem operasi bisa melakukan semuanya, tetapi gabungan perintah tersebut sulit diingat, berbeda antar sistem operasi, dan berbahaya ketika dijalankan pada berkas yang salah. Pada proyek ini kita membangun filetool, sebuah CLI pengelola file buatan sendiri yang dibangun dengan Python murni dari standard library.
Apa yang Kita Bangun #
filetool menerima subperintah bergaya git, sehingga setiap operasi file memiliki nama yang jelas dan bantuan yang dibangkitkan otomatis oleh module argparse. Delapan subperintah berikut akan siap pada akhir proyek:
daftar— tampilkan isi direktori, dengan format panjang opsionalinfo— tampilkan metadata sebuah berkas atau direktoricari— telusuri berkas berdasarkan pola globsalindanpindahkan— operasi penyalinan dan pemindahan yang menolak menimpahapus— penghapusan yang menuntut konfirmasi eksplisit dan dapat dialihkan ke folder sampahukuran— total ukuran rekursif gayaduorganisasi— berkas berpindah ke folder per ekstensi, selalu bisa dipratinjau lewat--dry-run
Proyek disusun menjadi empat bagian yang saling menumpuk; main.py pada setiap bagian adalah versi lengkap dari tahap tersebut dan dapat dijalankan langsung:
| Bagian | Fokus | Bekal utama |
|---|---|---|
| Bagian 1 | Argumen command line dan subperintah | Chapter Membuat CLI dengan argparse |
| Bagian 2 | Operasi file dan pola aman | Chapter Filesystem Automation |
| Bagian 3 | Konfigurasi dan error handling | Chapter Environment Variables dan Konfigurasi dengan TOML, JSON, dan YAML |
| Bagian 4 | Testing dan distribusi | Section Testing dan Code Quality serta Packaging dan Deployment |
Kontrak Perintah dan Exit Code #
filetool adalah alat yang dirancang untuk dirantai di skrip, sehingga setiap pemanggilan mengembalikan exit code yang berarti:
| Exit code | Arti | Contoh pemicu |
|---|---|---|
0 | sukses | filetool daftar files berhasil |
1 | galat runtime atau penolakan | berkas tidak ditemukan, izin ditolak, hapus tanpa --ya |
2 | galat penggunaan | argparse menolak subperintah yang tidak dikenal |
Pesan normal ditulis ke stdout, sedangkan pesan galat ditulis ke stderr. Pemisahan dua jalur keluaran ini memungkinkan keluaran filetool disaring dengan grep tanpa tercemar pesan galat.
Struktur Proyek #
Satu berkas program utama tumbuh secara kumulatif, ditambah konfigurasi dan berkas testing pada bagian akhir:
cli-pengelola-file/
├── _index.md
├── bagian-1-argumen-command-line/
│ ├── index.md
│ └── main.py
├── bagian-2-operasi-file/
│ ├── index.md
│ └── main.py
├── bagian-3-konfigurasi-dan-error-handling/
│ ├── index.md
│ ├── main.py
│ └── config.json
└── bagian-4-testing-dan-distribusi/
├── index.md
├── pyproject.toml
├── main.py
└── test_main.pySeluruh kode pada setiap bagian diuji nyata dengan Python 3.12, dan setiap blok keluaran pada halaman berikutnya adalah transkrip asli dari eksekusi program, bukan hasil rekaan. Berkas sumber setiap tahap tersedia pada bagian Berkas Sumber di akhir masing-masing halaman, sehingga kita bisa membandingkan perkembangan main.py antar bagian secara berdampingan.
Mari kita mulai dari kerangka argumennya.
Bangun kerangka filetool: parser argparse dengan subperintah daftar, info, dan cari.
Buka → # Bagian 2: Operasi FileTambahkan salin, pindahkan, hapus, ukuran, dan organisasi dengan pola aman dry-run dan konfirmasi.
Buka → # Bagian 3: Konfigurasi dan Error HandlingMuat config.json berlapis, saring berkas, pindahkan hapus ke folder sampah, dan tangani galat secara terpusat.
Buka → # Bagian 4: Testing dan DistribusiUji filetool dengan pytest lalu pasang sebagai perintah filetool lewat pyproject.toml dan virtual environment.
Buka →