Kami menyatukan Python dan Bash: rilis pustaka python-shell dan smart-env v. 1.0.1

Hari baik untuk semua!

Pada tanggal 29 Februari 2020, peresmian perpustakaan cerdas-env dan python-shell resmi diadakan . Bagi yang belum tahu, saya sarankan Anda membaca posting pertama .

Singkatnya, perubahan termasuk pelengkapan perintah secara otomatis, memperluas kemampuan untuk menjalankan perintah, sedikit perbaikan kembali dan perbaikan bug.

Saya meminta detail di bawah kucing.

Apa yang baru di python-shell?


Saya akan segera mulai dengan hidangan penutup.

Penyelesaian tim


Setuju - akan lebih mudah bila editor / IDE / terminal menanyakan nama perintah, dan terkadang memanggil parameter? Jadi python-shell sedikit maju dalam menyediakan fungsionalitas tersebut. Karena fakta bahwa bidang kelas Shell di bawah dek de-facto bukan bidangnya (__getattr__) di mana-mana, pelengkapan otomatis juga dibuat dari awal (dengan membebani metode __dir__ secara berurutan). Pelengkapan otomatis saat ini berjalan pada lingkungan BPython dan IPython. Tentu saja, saya ingin melihat integrasi dengan produk yang lebih terhormat seperti PyCharm, dan ke arah ini kami sedang menjajaki kemungkinan implementasi.

Menambahkan Properti


Sebagai bagian dari rilis, kelas Shell menerima properti last_command baru. Perlunya muncul karena fakta bahwa ketika ShellException dilemparkan oleh perintah dengan kode pengembalian tidak nol, objek Perintah tidak dikembalikan dari panggilan __call __ () dari objek perintah. Sekarang ada peluang untuk melakukannya:

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

Juga memperluas daftar properti dari objek Command. Menambahkan bidang kesalahan, yang mengembalikan output dari perintah ke aliran kesalahan.

Menjalankan Perintah dengan Python Nama Tidak Valid


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

Shell.2to3()

gagal - penerjemah tidak akan melompat.
Solusinya adalah dengan memanggil perintah dalam solusi:

Shell("2to3")  #   

Perlu dicatat bahwa dengan cara yang sama dimungkinkan untuk menjalankan perintah yang valid dari sudut pandang penerjemah, yang memungkinkan untuk membuat skrip yang fleksibel seperti

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

Perubahan kecil


  • Metode __repr __ () dan __str __ () dari objek Command diimplementasikan, yang sekarang menghasilkan nilai-nilai intuitif (masing-masing perintah dengan parameter dan knalpot stdout-nya).
  • Koreksi kecil berdasarkan kode.
  • Menambahkan cakupan uji serta menata ulang yang sudah ada.
  • Menambahkan kelas Subprocess dan Proses, yang tujuannya adalah untuk membuat tingkat abstraksi tambahan saat bekerja dengan modul subproses. Untuk sebagian besar, perlu untuk menghilangkan pengulangan kode ketika bekerja dengan Python 2/3, tetapi berpotensi memberikan bonus lain.

Apa yang baru di smart-env?


Tidak seperti python-shell, ada sedikit perubahan di pustaka smart-env. Alasannya sederhana - kurangnya waktu luang, di mana beberapa perbaikan potensial (misalnya, penyelesaian variabel lingkungan) dibawa ke rilis berikutnya.

Bahkan, perubahan berikut telah dibuat ke perpustakaan:

  • Koreksi kecil berdasarkan kode.
  • Refactoring
  • Reorganisasi dan penyempurnaan tes yang ada.

Paket Rilis Berikutnya


Pustaka python-shell


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

Pustaka cerdas-env


  • Implementasi penyelesaian sendiri variabel lingkungan di kelas ENV.
  • Dukungan untuk operator dalam untuk memverifikasi keberadaan variabel env.
  • Menerapkan fungsi str () dan repr () untuk kelas ENV.

Tanggal rilis berikutnya akan diumumkan tambahan di saluran komunikasi berikut:


All Articles