Petty little joy # 9: aplikasi konsol dengan wajah manusia

Para filsuf mengatakan bahwa orang perlu dinilai bukan dari seberapa tinggi mereka bisa memanjat, tetapi seberapa rendah mereka bisa jatuh.


Ada banyak pengembang hebat di dunia yang dapat menghasilkan algoritme spektakuler, arsitektur elegan, dan kode hebat. Tetapi programmer yang sama ini mengambil dan menulis kode terorganisir yang sangat biasa-biasa saja untuk beberapa skrip konsol kecil untuk menghitung analitik atau tambalan data dalam database. Tidak ada pengelompokan ke dalam kelas dan fungsi, argumen yang ceroboh, output primitif dari informasi yang tidak jelas menggunakan print()


Hari ini kita akan berbicara tentang cara membuat program yang lebih baik yang tidak dipedulikan oleh kebanyakan orang - utilitas konsol dan skrip sekali pakai.


gambar


python-nubia


Perpustakaan dari perusahaan barang terbesar kedua di dunia - Facebook. Para insinyur lokal juga bosan dengan kekacauan dalam aplikasi konsol, jadi mereka memutuskan untuk menyediakan antarmuka interaktif bagi mereka. Tentu saja, tekstual.


gambar


  • Pelengkapan otomatis untuk fungsi yang tersedia di skrip konsol Anda.
  • Anda dapat menghubungkan autocomplete di level terminal (berfungsi dalam bash dan zsh).
  • Bilah status yang menyenangkan dan indah yang akan menunjukkan kepada pengguna apa yang terjadi.
  • Petunjuk dan validasi pada set argumen fungsi dan tipenya.

Termgraph


Dengan kesimpulan informasi ke konsol, banyak yang umumnya mengalami kesulitan. Seperti yang dinyatakan di atas, sering kali turun ke hasil print() sederhana print() . Membaca ini, tentu saja, sangat tidak nyaman.


Untuk menggambar apa yang terjadi dalam program, ada sebuah istilah


Ini memungkinkan Anda untuk membuat gambar seperti itu di terminal



Atau yang lebih rumit



Menggunakan bilah sederhana, Anda dapat menunjukkan kemajuan program dalam bentuk strip yang indah - dan ini akan menjadi keren dan jauh lebih menyenangkan untuk mencetak nilai yang tidak dapat dipahami.


Kain


Script untuk dijalankan pada mesin jarak jauh adalah masalah tersendiri. Tentu saja, kita hidup di zaman DevOps, ketika banyak tugas diselesaikan menggunakan Garam dan Ansible. Tetapi itu juga terjadi bahwa Anda perlu login secara teratur ke sekelompok gerobak dorong jarak jauh dan menjalankan banyak perintah di sana. Untuk ini, ada kain


  • Dukungan untuk daftar host yang berbeda - Anda dapat menjalankan perintah di server basis data, di cluster aplikasi - cukup tulis mobil jarak jauh di skrip.
  • Kebijakan otorisasi yang berbeda untuk gerobak dorong - Anda dapat menggunakan kunci dan kata sandi.
  • Perincian skrip menjadi sub-perintah, pengelompokan sub-perintah ke dalam tim yang lebih besar - Anda dapat membuat struktur logis kompleks dari kode yang ingin Anda jalankan.
  • Dan, tentu saja, Anda dapat mengganggu kode perintah terminal dalam kode juga!

Fabric dibangun di sekitar Paramiko dan secara umum Anda dapat menjalankan perintah menggunakan pustaka komunikasi SSH tingkat rendah ini. Tetapi Fabric menyediakan tingkat abstraksi yang diperlukan, yang membuatnya jelas dan mudah digunakan.


python-prompt-toolkit


Lib ini mengubah script sederhana menjadi aplikasi konsol yang sangat kuat.


Misalnya, Anda dapat menambahkan baris prompt perintah ke antarmuka teks.


 from prompt_toolkit import prompt while 1: user_input = prompt('>') print(user_input) 

Dan setelah itu, Anda dapat menambahkan histori dari perintah yang digunakan, seperti di terminal Anda.


 from prompt_toolkit import prompt from prompt_toolkit.history import FileHistory while 1: user_input = prompt('>', history=FileHistory('history.txt'), ) print(user_input) 

Dan Anda dapat membuat prompt otomatis untuk jalur dari riwayat input.


 from prompt_toolkit import prompt from prompt_toolkit.history import FileHistory from prompt_toolkit.auto_suggest import AutoSuggestFromHistory while 1: user_input = prompt('>', history=FileHistory('history.txt'), auto_suggest=AutoSuggestFromHistory(), ) print(user_input) 

Dan ajarkan permintaan otomatis ke perintah yang telah ditentukan sebelumnya.


 from prompt_toolkit import prompt from prompt_toolkit.history import FileHistory from prompt_toolkit.auto_suggest import AutoSuggestFromHistory from prompt_toolkit.contrib.completers import WordCompleter SQLCompleter = WordCompleter(['select', 'from', 'insert', 'update', 'delete', 'drop'], ignore_case=True) while 1: user_input = prompt('SQL>', history=FileHistory('history.txt'), auto_suggest=AutoSuggestFromHistory(), completer=SQLCompleter, ) print(user_input) 

Liba sangat sederhana dan memungkinkan untuk membuat antarmuka Anda sendiri yang keren dan dapat disesuaikan sepenuhnya.


Kenapa ini?


Perhatian pada program yang tampaknya hanya dilakukan satu kali saja akan memungkinkan Anda untuk menulis bukan kode untuk dikeluarkan, tetapi alat konsol yang dapat dengan mudah digunakan kembali nanti. Ini menghemat waktu dan, tentu saja, membuat bekerja dengan skrip Anda jauh lebih menyenangkan.

Source: https://habr.com/ru/post/id463725/


All Articles