Π‘Π²ΡŠΡ€Π·Π²Π°ΠΌΠ΅ 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 ΡΡŠΡ‰ΠΎ сС Ρ€Π°Π·ΡˆΠΈΡ€ΠΈ. Π”ΠΎΠ±Π°Π²Π΅Π½ΠΎ Π΅ ΠΏΠΎΠ»Π΅ errors, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²Ρ€ΡŠΡ‰Π° ΠΈΠ·Ρ…ΠΎΠ΄Π° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π² ΠΏΠΎΡ‚ΠΎΠΊΠ° Π·Π° Π³Ρ€Π΅ΡˆΠΊΠΈ.

ИзпълнСниС на команди с нСвалидни имСна за 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.

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

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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster