БъздаванС Π½Π° приятСлство ΠΌΠ΅ΠΆΠ΄Ρƒ Python ΠΈ Bash: ИздаванС Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ python-shell ΠΈ smart-env v. 1.0.1

Π”ΠΎΠ±ΡŠΡ€ Π΄Π΅Π½ Π½Π° всички!

29 Ρ„Π΅Π²Ρ€ΡƒΠ°Ρ€ΠΈ 2020 Π³ΠΎΠ΄ΠΈΠ½Π° сС ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΎ ΠΌΠΈΠΊΡ€ΠΎΠΈΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ smart-env ΠΈ python-shell. Π—Π° Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са наясно, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΠΌ Π΄Π° Π³ΠΎ ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΠΏΡŠΡ€Π²ΠΎ ΠΏΡŠΡ€Π²ΠΈ пост.

Накратко, ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ, Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° изпълнСниС Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ, някои ΠΏΡ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΠΊΠΎΡ€Π΅ΠΊΡ†ΠΈΠΈ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ.

Π—Π° подробности Π²ΠΈΠΆΡ‚Π΅ ΠΊΠ°Ρ‚.

Какво Π΅ Π½ΠΎΠ²ΠΎΡ‚ΠΎ Π² 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, чиято Ρ†Π΅Π» Π΅ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π°Ρ‚ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ Π½ΠΈΠ²ΠΎ Π½Π° абстракция ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с ΠΌΠΎΠ΄ΡƒΠ»Π° subprocess. Най-Π²Π΅Ρ‡Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π·Π° ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π°Π½Π΅ Π½Π° Π΄ΡƒΠ±Π»ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с Python 2/3, Π½ΠΎ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° прСдостави ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ бонуси.

Какво Π΅ Π½ΠΎΠ²ΠΎΡ‚ΠΎ Π² smart-env?

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

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

  • НСзначитСлни ΠΊΠΎΡ€Π΅ΠΊΡ†ΠΈΠΈ Π½Π° ΠΊΠΎΠ΄Π°.
  • Π Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³.
  • РСорганизация ΠΈ ΡƒΡΡŠΠ²ΡŠΡ€ΡˆΠ΅Π½ΡΡ‚Π²Π°Π½Π΅ Π½Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ тСстовС.

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

Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π° python-shell

  • ДобавянС Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‰ΠΈ извиквания Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ (ΠΏΠ°Ρ€Π°Π»Π΅Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ).

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

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

Π”Π°Ρ‚ΠΈΡ‚Π΅ Π½Π° слСдващитС издания Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ обявСни Π² слСднитС ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΈ ΠΊΠ°Π½Π°Π»ΠΈ:

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€