Paggawa ng Python at Bash Friendship: Paglabas ng mga python-shell at smart-env v library. 1.0.1

Magandang araw sa lahat!

Pebrero 29 2020 taon naganap ang opisyal na micro-release ng mga aklatan matalino-env ΠΈ python-shell. Sa mga hindi pa nakakaalam, I suggest basahin niyo muna unang post.

Sa madaling salita, kasama sa mga pagbabago ang pagkumpleto ng command, pinalawak na mga kakayahan para sa pagpapatakbo ng mga command, ilang refactoring at pag-aayos ng bug.

Para sa mga detalye mangyaring tingnan ang pusa.

Ano ang bago sa python-shell?

Sisimulan ko agad sa dessert.

Pagkumpleto ng utos

Sumang-ayon - maginhawa kapag sinenyasan ka ng editor/IDE/terminal para sa pangalan ng command, at kung minsan kahit na ang mga parameter ng tawag? Kaya ang python-shell ay unti-unting sumusulong sa pagbibigay ng katulad na pag-andar. Dahil sa katotohanan na ang mga field ng Shell class sa ilalim ng hood ay de-facto hindi ang mga field nito (ang ubiquitous __getattr__), ang autocompletion ay ginawa rin mula sa simula (sa pamamagitan ng overloading ang __dir__ method, ayon sa pagkakabanggit). Kasalukuyang gumagana ang autocompletion sa mga kapaligiran ng BPython at IPython. Siyempre, gusto kong makita ang pagsasama sa mas kagalang-galang na mga produkto tulad ng PyCharm, at ang mga posibilidad ng pagpapatupad ay pinag-aaralan sa direksyong ito.

Pagdaragdag ng Mga Katangian

Bilang bahagi ng paglabas, nakatanggap ang klase ng Shell ng bagong last_command property. Ang pangangailangan para dito ay lumitaw dahil kapag ang isang ShellException ay itinapon ng isang command na may non-zero return code, ang Command object ay hindi ibinalik mula sa __call__() na tawag sa command object. Ngayon ay may pagkakataon na gawin ito:

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

Lumawak din ang listahan ng mga katangian ng Command object. Nagdagdag ng field ng mga error na nagbabalik ng output ng command sa stream ng error.

Pagpapatakbo ng mga utos na may mga di-wastong pangalan ng Python

Halos bawat system ay may kahit isang programa na ang pangalan ay hindi angkop bilang isang identifier sa Python (halimbawa, ang kilalang 2to3 utility). Tawagan mo siya

Shell.2to3()

Kung hindi ito gagana, hindi ito papayagan ng interpreter.
Ang solusyon ay tawagan ang utos sa isang roundabout na paraan:

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

Kapansin-pansin na sa parehong paraan maaari kang magpatakbo ng mga utos na wasto mula sa punto ng view ng interpreter, na nag-iiwan ng pagkakataon na lumikha ng mga nababaluktot na script tulad ng

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

Maliit na pagbabago

  • Ang __repr__() at __str__() na mga pamamaraan ng Command class object ay naipatupad na, na ngayon ay gumagawa ng mga intuitive values ​​(isang command na may mga parameter at ang stdout na output nito, ayon sa pagkakabanggit).
  • Mga menor de edad na pag-aayos ng code.
  • Pagdaragdag ng saklaw ng pagsubok, pati na rin ang muling pagsasaayos ng mga umiiral na.
  • Pagdaragdag ng mga klase ng Subprocess at Process, ang layunin nito ay lumikha ng karagdagang antas ng abstraction kapag nagtatrabaho sa subprocess module. Karamihan ay kinakailangan upang maalis ang pagdoble ng code kapag nagtatrabaho sa Python 2/3, ngunit maaari ring magbigay ng iba pang mga bonus.

Ano ang bago sa smart-env?

Hindi tulad ng python-shell, nagkaroon ng mas kaunting mga pagbabago sa smart-env library. Ang dahilan nito ay simple - kakulangan ng libreng oras, kung saan ang ilang potensyal na pagpapabuti (halimbawa, autocompletion ng mga variable ng kapaligiran) ay inilipat sa susunod na release.

Sa katunayan, ang mga sumusunod na pagbabago ay ginawa sa library:

  • Mga menor de edad na pag-aayos ng code.
  • Refactoring.
  • Muling pag-aayos at pagpipino ng mga kasalukuyang pagsubok.

Mga plano para sa mga susunod na release

library ng python-shell

  • Pagdaragdag ng suporta para sa hindi nakaharang na mga tawag sa command (parallelization of execution).

smart-env library

  • Pagpapatupad ng autocompletion ng mga variable ng kapaligiran sa klase ng ENV.
  • Suporta para sa in operator upang suriin ang pagkakaroon ng isang env variable.
  • Pagpapatupad ng suporta para sa str() at repr() function para sa ENV class.

Ang mga petsa ng mga susunod na release ay higit pang ipahayag sa mga sumusunod na channel ng komunikasyon:

Pinagmulan: www.habr.com

Magdagdag ng komento