БоздавањС ΠΏΡ€ΠΈΡ˜Π°Ρ‚Π΅Π»ΡΡ‚Π²ΠΎ со Python ΠΈ Bash: ΠžΠ±Ρ˜Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ python-shell ΠΈ smart-env v. 1.0.1

Π”ΠΎΠ±Π°Ρ€ Π΄Π΅Π½ Π½Π° ситС!

Π€Π΅Π²Ρ€ΡƒΠ°Ρ€ΠΈ 29 2020 Π³ΠΎΠ΄ΠΈΠ½ΠΈ сС ΠΎΠ΄Ρ€ΠΆΠ° ΠΎΡ„ΠΈΡ†ΠΈΡ˜Π°Π»Π½ΠΎ ΠΌΠΈΠΊΡ€ΠΎ-издавањС Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ ΠΏΠ°ΠΌΠ΅Ρ‚Π΅Π½-зависСн ΠΈ ΠΏΠΈΡ‚ΠΎΠ½-школка. Π—Π° ΠΎΠ½ΠΈΠ΅ ΠΊΠΎΠΈ Π½Π΅ сС Π·Π°ΠΏΠΎΠ·Π½Π°Π΅Π½ΠΈ, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΠΌ ΠΏΡ€Π²ΠΎ Π΄Π° Π³ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚Π΅ ΠΏΡ€Π²ΠΈΠΎΡ‚ пост.

Накратко, ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°Π°Ρ‚ ΠΊΠΎΠΌΠΏΠ»Π΅Ρ‚ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ, ΠΏΡ€ΠΎΡˆΠΈΡ€Π΅Π½ΠΈ моТности Π·Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ, Π½Π΅ΠΊΠΎΠΈ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΡ€Π°ΡšΠ΅ ΠΈ ΠΏΠΎΠΏΡ€Π°Π²Π΅Π½ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ.

Π—Π° Π΄Π΅Ρ‚Π°Π»ΠΈ, Π²ΠΈΠ΄Π΅Ρ‚Π΅ ΠΌΠ°Ρ‡ΠΊΠ°.

Π¨Ρ‚ΠΎ ΠΈΠΌΠ° Π½ΠΎΠ²ΠΎ Π²ΠΎ python-shell?

Π’Π΅Π΄Π½Π°Ρˆ ќС ΠΏΠΎΡ‡Π½Π°ΠΌ со дСсСрт.

Π—Π°Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°

Π‘Π΅ согласувам - ΠΏΠΎΠ³ΠΎΠ΄Π½ΠΎ Π΅ ΠΊΠΎΠ³Π° ΡƒΡ€Π΅Π΄Π½ΠΈΠΊΠΎΡ‚/IDE/Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΡ‚ ќС Π²Π΅ ΠΏΠΎΡ‚Ρ‚ΠΈΠΊΠ½Π΅ Π·Π° ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°, Π° понСкогаш Π΄ΡƒΡ€ΠΈ ΠΈ Π·Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ Π·Π° ΠΏΠΎΠ²ΠΈΠΊΠΎΡ‚? Π’Π°ΠΊΠ°, python-shell постСпСно Π½Π°ΠΏΡ€Π΅Π΄ΡƒΠ²Π° Π²ΠΎ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ слична функционалност. ΠŸΠΎΡ€Π°Π΄ΠΈ Ρ„Π°ΠΊΡ‚ΠΎΡ‚ ΡˆΡ‚ΠΎ ΠΏΠΎΠ»ΠΈΡšΠ°Ρ‚Π° ΠΎΠ΄ класата Shell ΠΏΠΎΠ΄ Ρ…Π°ΡƒΠ±Π°Ρ‚Π° сС Π΄Π΅-Ρ„Π°ΠΊΡ‚ΠΎ, Π° Π½Π΅ Π½Π΅Ρ˜Π·ΠΈΠ½ΠΈΡ‚Π΅ полиња (сСприсутното __getattr__), автоматското ΠΊΠΎΠΌΠΏΠ»Π΅Ρ‚ΠΈΡ€Π°ΡšΠ΅ бСшС исто Ρ‚Π°ΠΊΠ° создадСно ΠΎΠ΄ Π½ΡƒΠ»Π° (со ΠΏΡ€Π΅ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΡ‚ __dir__, соодвСтно). Автоматското ΠΊΠΎΠΌΠΏΠ»Π΅Ρ‚ΠΈΡ€Π°ΡšΠ΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π²ΠΎ срСдини BPython ΠΈ IPython. Π‘Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°, Π±ΠΈ сакал Π΄Π° Π²ΠΈΠ΄Π°ΠΌ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜Π° со ΠΏΠΎΠΏΠΎΡ‡ΠΈΡ‚ΡƒΠ²Π°Π½ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈ ΠΊΠ°ΠΊΠΎ PyCharm, Π° моТноститС Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° сС ΠΏΡ€ΠΎΡƒΡ‡ΡƒΠ²Π°Π°Ρ‚ Π²ΠΎ ΠΎΠ²Π°Π° насока.

Π”ΠΎΠ΄Π°Π²Π°ΡšΠ΅ ΡΠ²ΠΎΡ˜ΡΡ‚Π²Π°

Како Π΄Π΅Π» ΠΎΠ΄ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ, класата Shell Π΄ΠΎΠ±ΠΈ Π½ΠΎΠ²ΠΎ ΡΠ²ΠΎΡ˜ΡΡ‚Π²ΠΎ last_command. ΠŸΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π·Π° Ρ‚ΠΎΠ° сС појави бидСјќи ΠΊΠΎΠ³Π° ShellException бСшС Ρ„Ρ€Π»Π΅Π½ ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Π° со Π½Π΅Π½ΡƒΠ»Ρ‚Π° ΠΏΠΎΠ²Ρ€Π°Ρ‚Π΅Π½ ΠΊΠΎΠ΄, ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΎΡ‚ Command Π½Π΅ бСшС Π²Ρ€Π°Ρ‚Π΅Π½ ΠΎΠ΄ ΠΏΠΎΠ²ΠΈΠΊΠΎΡ‚ __call__() Π΄ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΠΎΡ‚ ΠΎΠ±Ρ˜Π΅ΠΊΡ‚. Π‘Π΅Π³Π° постои моТност Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΎΠ²Π°:

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

Бписокот Π½Π° ΡΠ²ΠΎΡ˜ΡΡ‚Π²Π° Π½Π° ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΎΡ‚ Command исто Ρ‚Π°ΠΊΠ° Π΅ ΠΏΡ€ΠΎΡˆΠΈΡ€Π΅Π½. Π”ΠΎΠ΄Π°Π΄Π΅Π½ΠΎ Π΅ ΠΏΠΎΠ»Π΅ Π·Π° Π³Ρ€Π΅ΡˆΠΊΠΈ ΡˆΡ‚ΠΎ Π³ΠΎ Π²Ρ€Π°ΡœΠ° ΠΈΠ·Π»Π΅Π·ΠΎΡ‚ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π²ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΡ‚ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ.

Π˜Π·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π°Ρ€Π΅Π΄Π±ΠΈ со Π½Π΅Π²Π°ΠΆΠ΅Ρ‡ΠΊΠΈ имиња Π½Π° Python

РСчиси сСкој систСм ΠΈΠΌΠ° Π±Π°Ρ€Π΅ΠΌ Π΅Π΄Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Ρ‡ΠΈΠ΅ ΠΈΠΌΠ΅ Π½Π΅ Π΅ соодвСтно ΠΊΠ°ΠΊΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π²ΠΎ Python (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠ·Π½Π°Ρ‚Π°Ρ‚Π° Π°Π»Π°Ρ‚ΠΊΠ° 2to3). ΠŸΠΎΠ²ΠΈΠΊΠ°Ρ˜Ρ‚Π΅ ја со

Shell.2to3()

Ако Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°, ΠΏΡ€Π΅Π²Π΅Π΄ΡƒΠ²Π°Ρ‡ΠΎΡ‚ Π½Π΅ΠΌΠ° Π΄Π° Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° ΠΏΠΎΠΌΠΈΠ½Π΅.
Π Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ Π΄Π° сС ΠΏΠΎΠ²ΠΈΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π½Π° ΠΊΡ€ΡƒΠΆΠ΅Π½ Π½Π°Ρ‡ΠΈΠ½:

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

Π’Ρ€Π΅Π΄ΠΈ Π΄Π° сС Π½Π°ΠΏΠΎΠΌΠ΅Π½Π΅ Π΄Π΅ΠΊΠ° Π½Π° ист Π½Π°Ρ‡ΠΈΠ½ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·Π²Ρ€ΡˆΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΊΠΎΠΈ сС Π²Π°Π»ΠΈΠ΄Π½ΠΈ ΠΎΠ΄ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° Ρ‚ΠΎΠ»ΠΊΡƒΠ²Π°Ρ‡ΠΎΡ‚, ΡˆΡ‚ΠΎ остава моТност Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ флСксибилни скрипти ΠΊΠ°ΠΊΠΎ

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

Мали ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ

  • Π˜ΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΈ сС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ __repr__() ΠΈ __str__() Π½Π° ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΎΡ‚ ΠΎΠ΄ класата Command, ΠΊΠΎΠΈ сСга ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄ΡƒΠ²Π°Π°Ρ‚ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΈ врСдности (ΠΊΠΎΠΌΠ°Π½Π΄Π° со ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΠΎΡ‚ ΠΈΠ·Π»Π΅Π· stdout, соодвСтно).
  • Мали ΠΏΠΎΠΏΡ€Π°Π²ΠΊΠΈ Π½Π° ΠΊΠΎΠ΄ΠΎΡ‚.
  • Π”ΠΎΠ΄Π°Π²Π°ΡšΠ΅ тСст покриСност, ΠΊΠ°ΠΊΠΎ ΠΈ Ρ€Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°ΡšΠ΅ Π½Π° постоСчкитС.
  • Π”ΠΎΠ΄Π°Π²Π°ΡšΠ΅ Π½Π° класитС Subprocess ΠΈ Process, Ρ‡ΠΈΡ˜Π° Ρ†Π΅Π» Π΅ Π΄Π° сС создадС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ Π½ΠΈΠ²ΠΎ Π½Π° Π°ΠΏΡΡ‚Ρ€Π°ΠΊΡ†ΠΈΡ˜Π° ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° со ΠΌΠΎΠ΄ΡƒΠ»ΠΎΡ‚ Π·Π° потпроцСс. ΠΠ°Ρ˜Ρ‡Π΅ΡΡ‚ΠΎ Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ Π·Π° Π΄Π° сС Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π° Π΄ΡƒΠΏΠ»ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ΄ΠΎΡ‚ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° со Python 2/3, Π½ΠΎ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΡ˜Π°Π»Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ бонуси.

Π¨Ρ‚ΠΎ ΠΈΠΌΠ° Π½ΠΎΠ²ΠΎ Π²ΠΎ smart-env?

Π—Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΠ΄ python-shell, ΠΈΠΌΠ° ΠΏΠΎΠΌΠ°Π»ΠΊΡƒ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π²ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° smart-env. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° Π·Π° ΠΎΠ²Π° Π΅ Сдноставна - нСдостаток Π½Π° слободно Π²Ρ€Π΅ΠΌΠ΅, ΠΏΡ€ΠΈ ΡˆΡ‚ΠΎ Π½Π΅ΠΊΠΎΠΈ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΡ˜Π°Π»Π½ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΡƒΠ²Π°ΡšΠ° (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, автоматско ΠΊΠΎΠΌΠΏΠ»Π΅Ρ‚ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ Π½Π° ΠΆΠΈΠ²ΠΎΡ‚Π½Π°Ρ‚Π° срСдина) Π±Π΅Π° прСмСстСни Π²ΠΎ слСдното ΠΈΠ·Π΄Π°Π½ΠΈΠ΅.

Π’ΡΡƒΡˆΠ½ΠΎΡΡ‚, слСднитС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ сС Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΈ Π²ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°:

  • Мали ΠΏΠΎΠΏΡ€Π°Π²ΠΊΠΈ Π½Π° ΠΊΠΎΠ΄ΠΎΡ‚.
  • Π Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΡ€Π°ΡšΠ΅.
  • Π Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° ΠΈ ΡƒΡΠΎΠ²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° постоСчкитС тСстови.

Планови Π·Π° слСднитС изданија

Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° со ΠΏΠΈΡ‚ΠΎΠ½-школка

  • Π”ΠΎΠ΄Π°Π²Π°ΡšΠ΅ ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€Π°Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈ ΠΏΠΎΠ²ΠΈΡ†ΠΈ (ΠΏΠ°Ρ€Π°Π»Π΅Π»ΠΈΠ·ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ).

smart-env Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°

  • Π˜ΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° автоматско ΠΏΠΎΠΏΠΎΠ»Π½ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ Π½Π° ΠΆΠΈΠ²ΠΎΡ‚Π½Π°Ρ‚Π° срСдина Π²ΠΎ класата ENV.
  • ΠŸΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° in ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΡ‚ Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΠΏΠΎΡΡ‚ΠΎΠ΅ΡšΠ΅Ρ‚ΠΎ Π½Π° env ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°.
  • Π˜ΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ str() ΠΈ repr() Π·Π° класата ENV.

Π”Π°Ρ‚ΡƒΠΌΠΈΡ‚Π΅ Π½Π° слСднитС изданија Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ ќС Π±ΠΈΠ΄Π°Ρ‚ објавСни Π½Π° слСднитС ΠΊΠ°Π½Π°Π»ΠΈ Π·Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°:

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€