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

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

ДСнСс, Python Π΅ Π΅Π΄Π΅Π½ ΠΎΠ΄ Π½Π°Ρ˜ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Π½ΠΈΡ‚Π΅ Ρ˜Π°Π·ΠΈΡ†ΠΈ Π²ΠΎ областа Π½Π° создавањС Π½Π΅ само софтвСрски ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈ, Ρ‚ΡƒΠΊΡƒ ΠΈ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π½ΠΈΠ²Π½Π°Ρ‚Π° инфраструктура. Како Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ°, ΠΌΠ½ΠΎΠ³Ρƒ Π»ΡƒΡ“Π΅, Π±Π΅Π· Ρ€Π°Π·Π»ΠΈΠΊΠ° Π΄Π°Π»ΠΈ ΠΏΠΎ Π½ΠΈΠ²Π½Π° волја ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Ρ‚ΠΎΠ°, ΠΌΠΎΡ€Π°Π° Π΄Π° Π½Π°ΡƒΡ‡Π°Ρ‚ Π½ΠΎΠ² јазик Π·Π° ΠΏΠΎΠ΄ΠΎΡ†Π½Π΅ΠΆΠ½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° ΠΊΠ°ΠΊΠΎ Π΄ΠΎΠ΄Π°Ρ‚ΠΎΠΊ Π½Π° старитС Π΄ΠΎΠ±Ρ€ΠΈ баш скрипти. Π‘Π΅ΠΏΠ°ΠΊ, Bash ΠΈ Python исповСдаат Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ пристапи Π·Π° ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ ΠΊΠΎΠ΄ ΠΈ ΠΈΠΌΠ°Π°Ρ‚ ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΈ карактСристики, ΡˆΡ‚ΠΎ Π·Π½Π°Ρ‡ΠΈ Π΄Π΅ΠΊΠ° ΠΏΡ€Π΅Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Bash скриптитС Π½Π° β€žΠ·ΠΌΠΈΡΠΊΠΈΠΎΡ‚ Ρ˜Π°Π·ΠΈΠΊβ€œ понСкогаш сС ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π° ΠΊΠ°ΠΊΠΎ ΠΎΠ±Π΅ΠΌΠ½Π° ΠΈ Π΄Π°Π»Π΅ΠΊΡƒ ΠΎΠ΄ Ρ‚Ρ€ΠΈΠ²ΠΈΡ˜Π°Π»Π½Π° Π·Π°Π΄Π°Ρ‡Π°.

Π—Π° Π΄Π° сС олСсни ΠΆΠΈΠ²ΠΎΡ‚ΠΎΡ‚ Π½Π° devops, ΠΌΠ½ΠΎΠ³Ρƒ корисни Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Π°Π»Π°Ρ‚ΠΊΠΈ Π²ΠΎ Python сС создадСни ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΡƒΠ²Π°Π°Ρ‚ Π΄Π° сС создаваат. Оваа ΡΡ‚Π°Ρ‚ΠΈΡ˜Π° ΠΎΠΏΠΈΡˆΡƒΠ²Π° Π΄Π²Π΅ Π½ΠΎΠ²ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ создадСни ΠΎΠ΄ Π°Π²Ρ‚ΠΎΡ€ΠΎΡ‚ Π½Π° овој пост - ΠΏΠ°ΠΌΠ΅Ρ‚Π΅Π½-зависСн ΠΈ ΠΏΠΈΡ‚ΠΎΠ½-школка - ΠΈ Π΄ΠΈΠ·Π°Ρ˜Π½ΠΈΡ€Π°Π½ Π΄Π° Π³ΠΎ ослободи ДСвос ΠΎΠ΄ ΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π΄Π° сС посвСти ΠΌΠ½ΠΎΠ³Ρƒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° слоТСноста Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° со Python, ΠΎΡΡ‚Π°Π²Π°Ρ˜ΡœΠΈ простор Π·Π° поинтСрСсни Π·Π°Π΄Π°Ρ‡ΠΈ. ΠžΠ±Π΅ΠΌΠΎΡ‚ Π½Π° активност Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ сС ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΠΆΠΈΠ²ΠΎΡ‚Π½Π°Ρ‚Π° срСдина ΠΈ Π»Π°Π½ΡΠΈΡ€Π°ΡšΠ΅ Π½Π° Π½Π°Π΄Π²ΠΎΡ€Π΅ΡˆΠ½ΠΈ ΠΊΠΎΠΌΡƒΠ½Π°Π»Π½ΠΈ услуги.

БСкој заинтСрСсиран, Π²Π΅ ΠΌΠΎΠ»ΠΈΠΌΠ΅ Π΄Π° ја Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΌΠ°Ρ‡ΠΊΠ°.

Нови β€žΠ²Π΅Π»ΠΎΡΠΈΠΏΠ΅Π΄ΠΈβ€œ?

Π‘Π΅ Ρ‡ΠΈΠ½ΠΈ, Π·ΠΎΡˆΡ‚ΠΎ Π΄Π° сС создадат Π½ΠΎΠ²ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π·Π° ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎ ΠΎΠ±ΠΈΡ‡Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ? Π¨Ρ‚ΠΎ Π²Π΅ спрСчува Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π΄Π° Π³ΠΈ користитС os.environ ΠΈ subprocess.<ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ»ΠΈ класа ΠΏΠΎ ваш ΠΈΠ·Π±ΠΎΡ€>?

ЌС Π΄Π°Π΄Π°ΠΌ Π΄ΠΎΠΊΠ°Π·ΠΈ Π²ΠΎ корист Π½Π° сСкоја ΠΎΠ΄ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ посСбно.

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

ΠŸΡ€Π΅Π΄ Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ сопствСна идСја, корисно Π΅ Π΄Π° ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΈ Π΄Π° Π±Π°Ρ€Π°Ρ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ˜Π°. Π‘Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°, постои Ρ€ΠΈΠ·ΠΈΠΊ Π΄Π° Π½Π΅ Π³ΠΎ Π½Π°Ρ˜Π΄Π΅Ρ‚Π΅ ΠΎΠ½Π° ΡˆΡ‚ΠΎ Π²ΠΈ Ρ‚Ρ€Π΅Π±Π°, Π½ΠΎ ΠΎΠ²Π° Π΅ ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎ β€žΠΎΡΠΈΠ³ΡƒΡ€ΠΈΡ‚Π΅Π»Π΅Π½ Π½Π°ΡΡ‚Π°Π½β€œ. Како ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, овој пристап Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π° ΠΈ Π·Π°ΡˆΡ‚Π΅Π΄ΡƒΠ²Π° ΠΌΠ½ΠΎΠ³Ρƒ Π²Ρ€Π΅ΠΌΠ΅ ΠΈ Π½Π°ΠΏΠΎΡ€.

Π‘ΠΏΠΎΡ€Π΅Π΄ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ бСшС ΠΎΡ‚ΠΊΡ€ΠΈΠ΅Π½ΠΎ слСдново:

  • ΠΈΠΌΠ° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ ΠΊΠΎΠΈ Π²ΡΡƒΡˆΠ½ΠΎΡΡ‚ Π³ΠΈ ΠΎΠ±Π²ΠΈΡ‚ΠΊΡƒΠ²Π°Π°Ρ‚ ΠΏΠΎΠ²ΠΈΡ†ΠΈΡ‚Π΅ Π΄ΠΎ os.environ, Π½ΠΎ Π²ΠΎ исто Π²Ρ€Π΅ΠΌΠ΅ Π±Π°Ρ€Π°Π°Ρ‚ Π΅Π΄Π΅Π½ ΠΊΡƒΠΏ Π΄Π΅Ρ˜ΡΡ‚Π²Π° ΡˆΡ‚ΠΎ Π³ΠΎ ΠΎΠ΄Π²Π»Π΅ΠΊΡƒΠ²Π°Π°Ρ‚ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅Ρ‚ΠΎ (создавањС ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ΄ класа, ΡΠΏΠ΅Ρ†ΠΈΡ˜Π°Π»Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π²ΠΎ ΠΏΠΎΠ²ΠΈΡ†ΠΈΡ‚Π΅ ΠΈΡ‚Π½.);
  • Има Π΄ΠΎΠ±Ρ€ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, ΠΊΠΎΠΈ, сСпак, сС строго Π²Ρ€Π·Π°Π½ΠΈ Π·Π° спСцифичСн СкосистСм (Π³Π»Π°Π²Π½ΠΎ Π²Π΅Π± Ρ€Π°ΠΌΠΊΠΈ ΠΊΠ°ΠΊΠΎ Django) ΠΈ Π·Π°Ρ‚ΠΎΠ° Π½Π΅ сС Π²ΠΎΠΎΠΏΡˆΡ‚ΠΎ ΡƒΠ½ΠΈΠ²Π΅Ρ€Π·Π°Π»Π½ΠΈ Π±Π΅Π· Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°;
  • Ρ€Π΅Ρ‚ΠΊΠΈ сС ΠΎΠ±ΠΈΠ΄ΠΈΡ‚Π΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ Π½Π΅ΡˆΡ‚ΠΎ Π½ΠΎΠ²ΠΎ. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ ΠΈ Сксплицитно Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π³ΠΈ врСдноститС Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ со ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π°ΡšΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΊΠ°ΠΊΠΎ
    get_<typename>(var_name)

    Или ΠΎΠ²Π΄Π΅ ΡƒΡˆΡ‚Π΅ Π΅Π΄Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, кој, сСпак, Π½Π΅ Π³ΠΎ ΠΏΠΎΠ΄Π΄Ρ€ΠΆΡƒΠ²Π° сСга обСсчСстСниот Python 2 (кој, ΠΈ ΠΏΠΎΠΊΡ€Π°Ρ˜ ΠΎΡ„ΠΈΡ†ΠΈΡ˜Π°Π»Π½ΠΎ RIP, сè ΡƒΡˆΡ‚Π΅ ΠΈΠΌΠ° ΠΏΠ»Π°Π½ΠΈΠ½ΠΈ ΠΎΠ΄ пишан ΠΊΠΎΠ΄ ΠΈ Ρ†Π΅Π»ΠΈ СкосистСми);

  • ΠΈΠΌΠ° ΡƒΡ‡ΠΈΠ»ΠΈΡˆΠ½ΠΈ Π·Π°Π½Π°Π΅Ρ‚ΠΈ ΠΊΠΎΠΈ ΠΎΠ΄ нСкоја Π½Π΅ΠΏΠΎΠ·Π½Π°Ρ‚Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π·Π°Π²Ρ€ΡˆΠΈΠ»Π΅ Π²ΠΎ Π²ΠΎΠ·Π²ΠΎΠ΄Π½ΠΎ PyPI ΠΈ создаваат само ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ со ΠΈΠΌΠ΅Π½ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Π½ΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ (особСно, ΠΈΠΌΠ΅Ρ‚ΠΎ β€žsmart-envβ€œ Π΅ Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½Π° ΠΌΠ΅Ρ€ΠΊΠ°).

И ΠΎΠ²Π°Π° листа ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ‚Ρ€Π°Π΅ Π΄ΠΎΠ»Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅. Π‘Π΅ΠΏΠ°ΠΊ, Π³ΠΎΡ€Π΅Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΡ‚Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ Π±Π΅Π° Π΄ΠΎΠ²ΠΎΠ»Π½ΠΈ Π·Π° Π΄Π° ΠΌΠ΅ Π²ΠΎΠ·Π±ΡƒΠ΄Π°Ρ‚ ΠΎΠΊΠΎΠ»Ρƒ ΠΈΠ΄Π΅Ρ˜Π°Ρ‚Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²Π°ΠΌ Π½Π΅ΡˆΡ‚ΠΎ ΠΏΠΎΠ³ΠΎΠ΄Π½ΠΎ ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€Π·Π°Π»Π½ΠΎ.

Π‘Π°Ρ€Π°ΡšΠ° ΡˆΡ‚ΠΎ Π±Π΅Π° поставСни ΠΏΡ€Π΅Π΄ Π΄Π° сС напишС smart-env:

  • ΠΠ°Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½Π° шСма Π·Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅
  • ΠŸΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΡˆΡ‚ΠΎ лСсно сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°
  • ΠšΠΎΠΌΠΏΠ°Ρ‚ΠΈΠ±ΠΈΠ»Π΅Π½ со Python 2.7
  • Π”ΠΎΠ±Ρ€Π° покриСност Π½Π° ΠΊΠΎΠ΄ΠΎΡ‚ со тСстови

На ΠΊΡ€Π°Ρ˜ΠΎΡ‚, сСто ΠΎΠ²Π° бСшС Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ. Π•Π²Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°:

from smart_env import ENV

print(ENV.HOME)  # Equals print(os.environ['HOME'])

# assuming you set env variable MYVAR to "True"

ENV.enable_automatic_type_cast()

my_var = ENV.MY_VAR  # Equals boolean True

ENV.NEW_VAR = 100  # Sets a new environment variable

Како ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΎΠ΄ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ‚, Π·Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ со Π½ΠΎΠ²Π° класа, само Ρ‚Ρ€Π΅Π±Π° Π΄Π° ја ΡƒΠ²Π΅Π·Π΅Ρ‚Π΅ (Π½Π΅ Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ - минус Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎΡ‚ΠΎ Π΄Π΅Ρ˜ΡΡ‚Π²ΠΎ). ΠŸΡ€ΠΈΡΡ‚Π°ΠΏΠΎΡ‚ Π΄ΠΎ која Π±ΠΈΠ»ΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°Ρ‚Π° сС постигнува со ΡƒΠΏΠ°Ρ‚ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π½Π΅Π° ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° ΠΎΠ΄ класата ENV, ΡˆΡ‚ΠΎ, Π²ΡΡƒΡˆΠ½ΠΎΡΡ‚, ја ΠΏΡ€Π°Π²ΠΈ ΠΎΠ²Π°Π° класа ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° Π·Π° Π΄ΠΎΠΌΠ°ΡˆΠ½Π°Ρ‚Π° систСмска ΠΎΠΊΠΎΠ»ΠΈΠ½Π°, Π΄ΠΎΠ΄Π΅ΠΊΠ° истоврСмСно ја ΠΏΡ€Π΅Ρ‚Π²ΠΎΡ€Π° Π²ΠΎ ΠΌΠΎΠΆΠ΅Π½ конфигурациски ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ Π·Π° рСчиси сСкој систСм ( сличСн пристап, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сС постигнува Π²ΠΎ Django, само Ρ‚Π°ΠΌΡƒ конфигурацискиот ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ Π΅ самиот ΠΌΠΎΠ΄ΡƒΠ»/ΠΏΠ°ΠΊΠ΅Ρ‚ Π·Π° поставки).

ΠžΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ/ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Ρ€Π΅ΠΆΠΈΠΌΠΎΡ‚ Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° автоматско ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ сС постигнува со ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ - enable_automatic_type_cast() ΠΈ disable_automatic_type_cast(). Ова ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ ΠΏΠΎΠ³ΠΎΠ΄Π½ΠΎ Π°ΠΊΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°Ρ‚Π° содрТи сСриски ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ сличСн Π½Π° JSON ΠΈΠ»ΠΈ Π΄ΡƒΡ€ΠΈ ΠΈ само Π‘ΡƒΠ»ΠΎΠ²Π° константа (Сксплицитното ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° DEBUG Π²ΠΎ Django со ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°Ρ‚Π° со Π½ΠΈΠ·ΠΈ β€žΠ²Π°Π»ΠΈΠ΄Π½ΠΈβ€œ Π΅ Π΅Π΄Π΅Π½ ΠΎΠ΄ Π½Π°Ρ˜Ρ‡Π΅ΡΡ‚ΠΈΡ‚Π΅ случаи). Но, сСга Π½Π΅ΠΌΠ° ΠΏΠΎΡ‚Ρ€Π΅Π±Π° Сксплицитно Π΄Π° сС ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€Π°Π°Ρ‚ Π½ΠΈΠ·ΠΈΡ‚Π΅ - ΠΏΠΎΠ²Π΅ΡœΠ΅Ρ‚ΠΎ ΠΎΠ΄ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈΡ‚Π΅ Π΄Π΅Ρ˜ΡΡ‚Π²Π° сС вСќС Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ Π²ΠΎ Π΄Π»Π°Π±ΠΎΡ‡ΠΈΠ½ΠΈΡ‚Π΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° ΠΈ само Ρ‡Π΅ΠΊΠ°Π°Ρ‚ сигнал Π·Π° Π΄Π΅Ρ˜ΡΡ‚Π²ΡƒΠ²Π°ΡšΠ΅. πŸ™‚ ΠžΠΏΡˆΡ‚ΠΎ Π·Π΅ΠΌΠ΅Π½ΠΎ, ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π° транспарСнтно ΠΈ Π³ΠΈ ΠΏΠΎΠ΄Π΄Ρ€ΠΆΡƒΠ²Π° рСчиси ситС достапни Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ (Π·Π°ΠΌΡ€Π·Π½Π°Ρ‚ΠΈ, слоТСни ΠΈ Π±Π°Ρ˜Ρ‚ΠΈ Π½Π΅ Π±Π΅Π° тСстирани).

Условот Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π½Π° Python 2 бСшС ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½ΠΎ Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΆΡ€Ρ‚Π²ΠΈ (Π½Π°ΠΏΡƒΡˆΡ‚Π°ΡšΠ΅ Π½Π° ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ ΠΈ Π½Π΅ΠΊΠΎΠΈ ΠΎΠ΄ β€žΡˆΠ΅ΡœΠ΅Ρ€Π½ΠΈΡ‚Π΅ Π±ΠΎΠ½Π±ΠΎΠ½ΠΈβ€œ ΠΎΠ΄ Π½Π°Ρ˜Π½ΠΎΠ²ΠΈΡ‚Π΅ Π²Π΅Ρ€Π·ΠΈΠΈ Π½Π° Python 3), особСно Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° сСприсутнитС ΡˆΠ΅ΡΡ‚ (Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°ΡšΠ΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ со ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° мСтакласитС ).

Но, ΠΏΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ Π½Π΅ΠΊΠΎΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΡƒΠ²Π°ΡšΠ°:

  • ΠŸΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ°Ρ‚Π° Π·Π° Python 3 Π·Π½Π°Ρ‡ΠΈ Π²Π΅Ρ€Π·ΠΈΡ˜Π° 3.5 ΠΈ повисока (Π½ΠΈΠ²Π½ΠΎΡ‚ΠΎ присуство Π²ΠΎ Π²Π°ΡˆΠΈΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ ΠΈΠ»ΠΈ Π½Π° мрзСливост ΠΈΠ»ΠΈ Π½Π° нСдостаток Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π° ΠΎΠ΄ ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΡƒΠ²Π°ΡšΠ°, бидСјќи Π΅ Ρ‚Π΅ΡˆΠΊΠΎ Π΄Π° сС дојдС Π΄ΠΎ ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΈΠ²Π½Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π·ΠΎΡˆΡ‚ΠΎ сè ΡƒΡˆΡ‚Π΅ стС Π½Π° 3.4);
  • Π’ΠΎ Python 2.7, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π½Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΠΆΡƒΠ²Π° Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° Π½Π° мноТСства Π±ΡƒΠΊΠ²Π°Π»ΠΈ. Опис Ρ‚ΡƒΠΊΠ°. Но, Π°ΠΊΠΎ нСкој сака Π΄Π° Π³ΠΎ спровСдС, Π΄ΠΎΠ±Ρ€Π΅Π΄ΠΎΡ˜Π΄Π΅Π½ стС :);

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° ΠΈΠΌΠ° ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·Π°ΠΌ Π·Π° исклучок Π²ΠΎ ΡΠ»ΡƒΡ‡Π°Ρ˜ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΏΡ€ΠΈ ΠΏΠ°Ρ€ΡΠΈΡ€Π°ΡšΠ΅. Ако Π½ΠΈΠ·Π°Ρ‚Π° Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€Π΅ΠΏΠΎΠ·Π½Π°Π΅ ΠΎΠ΄ Π½ΠΈΡ‚Ρƒ Π΅Π΄Π΅Π½ ΠΎΠ΄ достапнитС Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈ, врСдноста останува Π½ΠΈΠ·Π° (Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ², ΠΏΠΎΡ€Π°Π΄ΠΈ практичност ΠΈ компатибилност Π½Π°Π½Π°Π·Π°Π΄ со Π²ΠΎΠΎΠ±ΠΈΡ‡Π°Π΅Π½Π°Ρ‚Π° Π»ΠΎΠ³ΠΈΠΊΠ° Π·Π° Ρ‚ΠΎΠ° ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°Π°Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ Π²ΠΎ Bash).

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

Π‘Π΅Π³Π° ќС Π²ΠΈ ΠΊΠ°ΠΆΠ°ΠΌ Π·Π° Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° (ќС Π³ΠΎ ΠΈΡΠΏΡƒΡˆΡ‚Π°ΠΌ описот Π½Π° нСдостатоцитС Π½Π° постоСчкитС Π°Π½Π°Π»ΠΎΠ·ΠΈ - Ρ‚ΠΎΡ˜ Π΅ сличСн Π½Π° оној опишан Π·Π° smart-env. Аналози - Ρ‚ΡƒΠΊΠ° ΠΈ Ρ‚ΡƒΠΊΠ°).

Π’ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, ΠΈΠ΄Π΅Ρ˜Π°Ρ‚Π° Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° ΠΈ Π±Π°Ρ€Π°ΡšΠ°Ρ‚Π° Π·Π° Ρ‚ΠΎΠ° сС слични Π½Π° ΠΎΠ½ΠΈΠ΅ опишани Π·Π° smart-env, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π²ΠΈΠ΄ΠΈ ΠΎΠ΄ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ‚:

from python_shell import Shell

Shell.ls('-l', '$HOME')  # Equals "ls -l $HOME"

command = Shell.whoami()  # Equals "whoami"
print(command.output)  # prints your current user name

print(command.command)  # prints "whoami"
print(command.return_code)  # prints "0"
print(command.arguments)  # prints ""

Shell.mkdir('-p', '/tmp/new_folder')  # makes a new folder

Π˜Π΄Π΅Ρ˜Π°Ρ‚Π° Π΅ ΠΎΠ²Π°Π°:

  1. Π•Π΄Π½Π° класа ΡˆΡ‚ΠΎ Π³ΠΎ прСтставува Π‘Π°Ρˆ Π²ΠΎ свСтот Π½Π° ΠŸΠ°Ρ˜Ρ‚ΠΎΠ½;
  2. БСкоја ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π° Bash сС ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π° ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° ΠΎΠ΄ класата Shell;
  3. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ Π·Π° сСкој ΠΏΠΎΠ²ΠΈΠΊ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° ΠΏΠΎΡ‚ΠΎΠ° сС прСнСсуваат Π²ΠΎ соодвСтниот ΠΊΠΎΠΌΠ°Π½Π΄Π΅Π½ ΠΏΠΎΠ²ΠΈΠΊ Bash;
  4. БСкоја ΠΊΠΎΠΌΠ°Π½Π΄Π° сС ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π° β€žΠΎΠ²Π΄Π΅ ΠΈ ΡΠ΅Π³Π°β€œ Π²ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΡ‚ ΠΊΠΎΠ³Π° ќС сС ΠΏΠΎΠ²ΠΈΠΊΠ°, Ρ‚.Π΅. Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π° синхрониот пристап;
  5. ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° сС пристапи Π΄ΠΎ ΠΈΠ·Π»Π΅Π·ΠΎΡ‚ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π²ΠΎ stdout, ΠΊΠ°ΠΊΠΎ ΠΈ Π½Π΅Ρ˜Π·ΠΈΠ½ΠΈΠΎΡ‚ ΠΏΠΎΠ²Ρ€Π°Ρ‚Π΅Π½ ΠΊΠΎΠ΄;
  6. Ако ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π½Π΅ Π΅ Π²ΠΎ систСмот, сС Ρ„Ρ€Π»Π° исклучок.

Како ΠΈ кај smart-env, ΠΈΠΌΠ° ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° Python 2 (ΠΈΠ°ΠΊΠΎ бСшС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π° ΠΌΠ°Π»ΠΊΡƒ повСќС ΠΆΡ€Ρ‚Π²Π΅Π½Π° ΠΊΡ€Π²) ΠΈ Π½Π΅ΠΌΠ° ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° Python 3.0-3.4.

Планови Π·Π° Ρ€Π°Π·Π²ΠΎΡ˜ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΈ користитС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ сСга: ΠΈ Π΄Π²Π΅Ρ‚Π΅ сС објавСни Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΡ˜Π°Π»Π½ΠΈΠΎΡ‚ PyPI. Π˜Π·Π²ΠΎΡ€ΠΈΡ‚Π΅ сС достапни Π½Π° Github (Π²ΠΈΠ΄ΠΈ ΠΏΠΎΠ΄ΠΎΠ»Ρƒ).

Π”Π²Π΅Ρ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ќС Π±ΠΈΠ΄Π°Ρ‚ Ρ€Π°Π·Π²ΠΈΠ΅Π½ΠΈ зСмајќи Π³ΠΈ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ ΠΏΠΎΠ²Ρ€Π°Ρ‚Π½ΠΈΡ‚Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ собрани ΠΎΠ΄ заинтСрСсиранитС. И, Π°ΠΊΠΎ ΠΌΠΎΠΆΠ΅Π±ΠΈ Π΅ Ρ‚Π΅ΡˆΠΊΠΎ Π΄Π° сС дојдС Π΄ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎ smart-env, Ρ‚ΠΎΠ³Π°Ρˆ Π²ΠΎ python-shell Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ‚ΠΈΠ²Π½ΠΎ ΠΈΠΌΠ° ΡƒΡˆΡ‚Π΅ Π½Π΅ΡˆΡ‚ΠΎ Π΄Π° сС Π΄ΠΎΠ΄Π°Π΄Π΅:

  • ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€Π°Π½ΠΈ ΠΏΠΎΠ²ΠΈΡ†ΠΈ;
  • моТност Π·Π° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° со Ρ‚ΠΈΠΌΠΎΡ‚ (Ρ€Π°Π±ΠΎΡ‚Π° со stdin);
  • додавањС Π½ΠΎΠ²ΠΈ ΡΠ²ΠΎΡ˜ΡΡ‚Π²Π° (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠ²ΠΎΡ˜ΡΡ‚Π²ΠΎ Π·Π° ΠΏΡ€ΠΈΠΌΠ°ΡšΠ΅ ΠΈΠ·Π»Π΅Π· ΠΎΠ΄ stderr);
  • ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ со достапни ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ (Π·Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° со Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° dir());
  • ΠΈΡ‚Π½

Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈ

  1. smart-env Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°: Github ΠΈ PyPI
  2. Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° python-shell: Github ΠΈ PyPI
  3. ВСлСграмски ΠΊΠ°Π½Π°Π» Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΡšΠ° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°

Π£ΠŸΠ” 23.02.2020:
* Π‘ΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π°Ρ‚Π° сС прСмСстСни, соодвСтнитС врски сС Π°ΠΆΡƒΡ€ΠΈΡ€Π°Π½ΠΈ
* Π’Π΅Ρ€Π·ΠΈΡ˜Π°Ρ‚Π° python-shell==1.0.1 сС ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²ΡƒΠ²Π° Π·Π° ΠΎΠ±Ρ˜Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° 29.02.2020 Π³ΠΎΠ΄ΠΈΠ½Π°. ΠŸΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°Π°Ρ‚ ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° автоматско ΠΊΠΎΠΌΠΏΠ»Π΅Ρ‚ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° dir(Shell), ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ со Π½Π΅Π²Π°ΠΆΠ΅Ρ‡ΠΊΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° Python ΠΈ ΠΏΠΎΠΏΡ€Π°Π²Π΅Π½ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ.

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

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