Membuat Persahabatan Python dan Bash: Rilis pustaka python-shell dan smart-env v. 1.0.1

Hari baik untuk semua!

Februari 29 2020 tahun rilis mikro resmi perpustakaan terjadi lingkungan cerdas ΠΈ kulit ular piton. Bagi yang belum mengetahuinya, saya sarankan Anda membacanya terlebih dahulu Pos pertama.

Singkatnya, perubahan tersebut mencakup penyelesaian perintah, perluasan kemampuan untuk menjalankan perintah, beberapa pemfaktoran ulang, dan perbaikan bug.

Untuk detailnya silakan lihat kucing.

Apa yang baru di python-shell?

Saya akan segera mulai dengan hidangan penutup.

Penyelesaian perintah

Setuju - akan lebih mudah jika editor/IDE/terminal menanyakan nama perintah, dan terkadang bahkan parameter panggilan? Jadi python-shell secara bertahap membuat kemajuan dalam menyediakan fungsi serupa. Karena kenyataan bahwa bidang kelas Shell di bawah tenda secara de-facto bukan bidangnya (__getattr__ yang ada di mana-mana), pelengkapan otomatis juga dibuat dari awal (masing-masing dengan membebani metode __dir__ secara berlebihan). Pelengkapan otomatis saat ini berfungsi di lingkungan BPython dan IPython. Tentu saja, saya ingin melihat integrasi dengan produk yang lebih terkenal seperti PyCharm, dan kemungkinan implementasi sedang dipelajari ke arah ini.

Menambahkan Properti

Sebagai bagian dari rilis, kelas Shell menerima properti last_command baru. Kebutuhan akan hal ini muncul karena ketika ShellException dilempar oleh perintah dengan kode pengembalian bukan nol, objek Command tidak dikembalikan dari panggilan __call__() ke objek perintah. Sekarang ada peluang untuk melakukan ini:

try:
    command = Shell.touch('/foo.txt')
except ShellException:
    command = Shell.last_command

Daftar properti objek Command juga telah diperluas. Menambahkan bidang kesalahan yang mengembalikan keluaran perintah ke aliran kesalahan.

Menjalankan perintah dengan nama Python yang tidak valid

Hampir setiap sistem memiliki setidaknya satu program yang namanya tidak cocok sebagai pengenal dengan Python (misalnya, utilitas 2to3 yang terkenal). Panggil dia dengan

Shell.2to3()

Jika tidak berhasil, penerjemah tidak akan membiarkannya lewat.
Solusinya adalah dengan memanggil perintah secara tidak langsung:

Shell("2to3")  # Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

Perlu dicatat bahwa dengan cara yang sama Anda dapat menjalankan perintah yang valid dari sudut pandang penerjemah, sehingga memberikan peluang untuk membuat skrip fleksibel seperti

cmd = "python{}".format(sys.version_info[0])
Shell(cmd)(*args, **kwargs)

Perubahan kecil

  • Metode __repr__() dan __str__() dari objek kelas Command telah diimplementasikan, yang sekarang menghasilkan nilai intuitif (masing-masing perintah dengan parameter dan keluaran stdout).
  • Perbaikan kode kecil.
  • Menambah cakupan tes, serta menata ulang cakupan tes yang sudah ada.
  • Menambahkan kelas Subproses dan Proses, yang tujuannya adalah untuk membuat tingkat abstraksi tambahan saat bekerja dengan modul subproses. Sebagian besar diperlukan untuk menghilangkan duplikasi kode saat bekerja dengan Python 2/3, namun berpotensi memberikan bonus lain juga.

Apa yang baru di smart-env?

Tidak seperti python-shell, ada lebih sedikit perubahan di perpustakaan smart-env. Alasannya sederhana - kurangnya waktu luang, di mana beberapa potensi perbaikan (misalnya, pelengkapan otomatis variabel lingkungan) dipindahkan ke rilis berikutnya.

Faktanya, perubahan berikut telah dilakukan pada perpustakaan:

  • Perbaikan kode kecil.
  • Pemfaktoran ulang.
  • Reorganisasi dan penyempurnaan tes yang ada.

Rencana untuk rilis berikutnya

perpustakaan python-shell

  • Menambahkan dukungan untuk panggilan perintah non-pemblokiran (paralelisasi eksekusi).

perpustakaan smart-env

  • Implementasi pelengkapan otomatis variabel lingkungan di kelas ENV.
  • Dukungan untuk operator in untuk memeriksa keberadaan variabel env.
  • Implementasi dukungan fungsi str() dan repr() untuk kelas ENV.

Tanggal rilis berikutnya akan diumumkan lebih lanjut melalui saluran komunikasi berikut:

Sumber: www.habr.com

Tambah komentar