ΠΠΎΠ±ΡΡ Π΄Π΅Π½ Π½Π° Π²ΡΠΈΡΠΊΠΈ
ΠΠ½Π΅Ρ Python Π΅ Π΅Π΄ΠΈΠ½ ΠΎΡ Π½Π°ΠΉ-ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡΠ΅ Π΅Π·ΠΈΡΠΈ Π² ΠΎΠ±Π»Π°ΡΡΡΠ° Π½Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π΅ ΡΠ°ΠΌΠΎ Π½Π° ΡΠ°ΠΌΠΈΡΠ΅ ΡΠΎΡΡΡΠ΅ΡΠ½ΠΈ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈ, Π½ΠΎ ΠΈ Π½Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½Π΅ΡΠΎ Π½Π° ΡΡΡ Π½Π°ΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°. Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎ devops, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ Π΄Π°Π»ΠΈ ΠΏΠΎ ΡΡΡ Π½Π° Π²ΠΎΠ»Ρ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠΈΠ² Π½Π΅Ρ, ΡΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° Π½Π°ΡΡΠ°Ρ Π½ΠΎΠ² Π΅Π·ΠΈΠΊ Π·Π° ΠΏΠΎ-ΠΊΡΡΠ½Π° ΡΠΏΠΎΡΡΠ΅Π±Π° ΠΊΠ°ΡΠΎ Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΡΠΌ Π΄ΠΎΠ±ΡΠΈΡΠ΅ ΡΡΠ°ΡΠΈ Bash ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅. Bash ΠΈ Python ΠΎΠ±Π°ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ²ΡΠ΄Π²Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈ Π·Π° ΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ ΠΈ ΠΈΠΌΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ, ΠΊΠΎΠ΅ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΏΡΠ΅Π½Π°ΡΡΠ½Π΅ΡΠΎ Π½Π° Bash ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ ΠΊΡΠΌ βΠ·ΠΌΠΈΠΉΡΠΊΠΈΡ Π΅Π·ΠΈΠΊβ ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΡΠ΅ ΠΎΠΊΠ°Π·Π²Π° ΠΎΠ±Π΅ΠΌΠ½Π° ΠΈ Π΄Π°Π»Π΅Ρ Π½Π΅ ΡΡΠΈΠ²ΠΈΠ°Π»Π½Π° Π·Π°Π΄Π°ΡΠ°.
ΠΠ° Π΄Π° ΡΠ»Π΅ΡΠ½ΡΡ ΠΆΠΈΠ²ΠΎΡΠ° Π½Π° devops, Π±ΡΡ
Π° ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ ΠΈ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°Ρ Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ ΠΏΠΎΠΌΠΎΡΠ½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ Π² 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 ΡΡΠ΅Π· ΡΡΠ°Π²Π½ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° Ρ βΠ²Π°Π»ΠΈΠ΄Π½ΠΈβ Π½ΠΈΠ·ΠΎΠ²Π΅ Π΅ Π΅Π΄ΠΈΠ½ ΠΎΡ Π½Π°ΠΉ-ΡΠ΅ΡΡΠΈΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ). ΠΠΎ ΡΠ΅Π³Π° Π½ΡΠΌΠ° Π½ΡΠΆΠ΄Π° ΠΎΡ ΠΈΠ·ΡΠΈΡΠ½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅ - ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΎΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π²Π΅ΡΠ΅ ΡΠ° Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ Π² Π΄ΡΠ»Π±ΠΈΠ½ΠΈΡΠ΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° ΠΈ ΠΏΡΠΎΡΡΠΎ ΡΠ°ΠΊΠ°Ρ ΡΠΈΠ³Π½Π°Π» Π·Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅. π ΠΠ°ΡΠΎ ΡΡΠ»ΠΎ Π²ΡΠ²Π΅ΠΆΠ΄Π°Π½Π΅ΡΠΎ ΡΠ°Π±ΠΎΡΠΈ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎ ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΏΠΎΡΡΠΈ Π²ΡΠΈΡΠΊΠΈ Π½Π°Π»ΠΈΡΠ½ΠΈ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ (frozenset, complex ΠΈ bytes Π½Π΅ ΡΠ° ΡΠ΅ΡΡΠ²Π°Π½ΠΈ).
ΠΠ·ΠΈΡΠΊΠ²Π°Π½Π΅ΡΠΎ Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Python 2 Π±Π΅ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΎ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π±Π΅Π· ΠΆΠ΅ΡΡΠ²ΠΈ (ΠΈΠ·ΠΎΡΡΠ°Π²ΡΠ½Π΅ΡΠΎ Π½Π° ΠΏΠΈΡΠ°Π½Π΅ΡΠΎ ΠΈ Π½ΡΠΊΠΎΠΈ ΠΎΡ βΠ·Π°Ρ Π°ΡΠ½ΠΈΡΠ΅ Π±ΠΎΠ½Π±ΠΎΠ½ΠΈβ Π½Π° Π½Π°ΠΉ-Π½ΠΎΠ²ΠΈΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π½Π° Python 3), ΠΏΠΎ-ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π²Π΅Π·Π΄Π΅ΡΡΡΠΈΡΠ΅ ΡΠ΅ΡΡ (Π·Π° ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅ Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΠΎΠ²Π΅ ).
ΠΠΎ ΠΈΠΌΠ° Π½ΡΠΊΠΎΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ:
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° Python 3 ΠΎΠ·Π½Π°ΡΠ°Π²Π° Π²Π΅ΡΡΠΈΡ 3.5 ΠΈ ΠΏΠΎ-Π½ΠΎΠ²Π° (ΡΡΡ Π½ΠΎΡΠΎ ΠΏΡΠΈΡΡΡΡΠ²ΠΈΠ΅ Π²ΡΠ² Π²Π°ΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡ Π΅ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΈΠ»ΠΈ ΠΎΡ ΠΌΡΡΠ·Π΅Π», ΠΈΠ»ΠΈ ΠΎΡ Π»ΠΈΠΏΡΠ° Π½Π° Π½ΡΠΆΠ΄Π° ΠΎΡ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π΅ ΡΡΡΠ΄Π½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΌΠΈΡΠ»ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈΠ²Π½Π° ΠΏΡΠΈΡΠΈΠ½Π° Π·Π°ΡΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ ΡΡΠ΅ Π½Π° 3.4);
- Π Python 2.7 Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ Π»ΠΈΡΠ΅ΡΠ°Π»ΠΈ. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
ΡΡΠΊ . ΠΠΎ Π°ΠΊΠΎ Π½ΡΠΊΠΎΠΉ ΠΈΡΠΊΠ° Π΄Π° Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°, Π·Π°ΠΏΠΎΠ²ΡΠ΄Π°ΠΉΡΠ΅ :);
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° ΡΡΡΠΎ ΠΈΠΌΠ° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ Π·Π° ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅. ΠΠΊΠΎ Π½ΠΈΠ·ΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΠ°Π·ΠΏΠΎΠ·Π½Π°Ρ ΠΎΡ Π½ΠΈΡΠΎ Π΅Π΄ΠΈΠ½ ΠΎΡ Π½Π°Π»ΠΈΡΠ½ΠΈΡΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΈ, ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° ΠΎΡΡΠ°Π²Π° Π½ΠΈΠ· (ΠΏΠΎ-ΡΠΊΠΎΡΠΎ ΠΎΡ ΡΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π° ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ ΠΈ ΠΎΠ±ΡΠ°ΡΠ½Π° ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ Ρ ΠΎΠ±ΠΈΡΠ°ΠΉΠ½Π°ΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ° Π½Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΡΡ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ Π² Bash).
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π° python-shell
Π‘Π΅Π³Π° ΡΠ΅ Π²ΠΈ ΡΠ°Π·ΠΊΠ°ΠΆΠ° Π·Π° Π²ΡΠΎΡΠ°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° (ΡΠ΅ ΠΏΡΠΎΠΏΡΡΠ½Π° ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΡΠΈΡΠ΅ Π½Π° ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡΠ΅ Π°Π½Π°Π»ΠΎΠ·ΠΈ - ΡΡ Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Π½Π° ΠΎΠΏΠΈΡΠ°Π½Π°ΡΠ° Π·Π° 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
ΠΠ΄Π΅ΡΡΠ° Π΅ ΡΠ»Π΅Π΄Π½Π°ΡΠ°:
- ΠΠ΄ΠΈΠ½ ΠΊΠ»Π°Ρ, ΠΊΠΎΠΉΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π° Bash Π² ΡΠ²Π΅ΡΠ° Π½Π° Python;
- ΠΡΡΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° Bash ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΠΊΠ°ΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π½Π° ΠΊΠ»Π°ΡΠ° Shell;
- Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π·Π° Π²ΡΡΠΊΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π°Ρ Π² ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΎΡΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Bash;
- ΠΡΡΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° βΡΡΠΊ ΠΈ ΡΠ΅Π³Π°β Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ°, Π² ΠΊΠΎΠΉΡΠΎ Π΅ ΠΈΠ·Π²ΠΈΠΊΠ°Π½Π°, Ρ.Π΅. ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΈΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΠ°Π±ΠΎΡΠΈ;
- Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΈΠ·Ρ ΠΎΠ΄Π° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π² stdout, ΠΊΠ°ΠΊΡΠΎ ΠΈ Π½Π΅ΠΉΠ½ΠΈΡ ΠΊΠΎΠ΄ Π·Π° Π²ΡΡΡΠ°Π½Π΅;
- ΠΠΊΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π½Π΅ Π΅ Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, ΡΠ΅ Ρ Π²ΡΡΠ»Ρ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
ΠΠ°ΠΊΡΠΎ ΠΏΡΠΈ smart-env, ΠΈΠΌΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Python 2 (Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ Π±Π΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΆΠ΅ΡΡΠ²Π΅Π½Π° ΠΊΡΡΠ²) ΠΈ Π½ΡΠΌΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Python 3.0-3.4.
ΠΠ»Π°Π½ΠΎΠ²Π΅ Π·Π° ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ°
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅ ΡΠ΅Π³Π°: ΠΈ Π΄Π²Π΅ΡΠ΅ ΡΠ° ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ΠΈ Π² ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΈΡ PyPI. ΠΠ·ΡΠΎΡΠ½ΠΈΡΠΈΡΠ΅ ΡΠ° Π½Π°Π»ΠΈΡΠ½ΠΈ Π² Github (Π²ΠΈΠΆΡΠ΅ ΠΏΠΎ-Π΄ΠΎΠ»Ρ).
Π Π΄Π²Π΅ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½ΠΈ, ΠΊΠ°ΡΠΎ ΡΠ΅ Π²Π·Π΅ΠΌΠ°Ρ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΠΎΡΠ·ΠΈΠ²ΠΈΡΠ΅, ΡΡΠ±ΡΠ°Π½ΠΈ ΠΎΡ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π½ΠΈΡΠ΅. Π Π°ΠΊΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ ΡΡΡΠ΄Π½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΌΠΈΡΠ»ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½ΠΎΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π² smart-env, ΡΠΎ Π² python-shell ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΈΠΌΠ° ΠΎΡΠ΅ Π½Π΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅:
- ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Π½Π΅Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠΈ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠΈ;
- Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½Π° ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡ Ρ Π΅ΠΊΠΈΠΏΠ° (ΡΠ°Π±ΠΎΡΠ° ΡΡΡ stdin);
- Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° Π½ΠΎΠ²ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΈΠ·Ρ ΠΎΠ΄ ΠΎΡ stderr);
- Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ Π½Π°Π»ΠΈΡΠ½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ (Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Ρ ΡΡΠ½ΠΊΡΠΈΡΡΠ° dir());
- ΠΈ Ρ.Π½.
ΠΠΎΠ·ΠΎΠ²Π°Π²Π°Π½Π΅ΡΠΎ
- Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° smart-env:
Github ΠΈPyPI - Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π° python-shell:
Github ΠΈPyPI Π’Π΅Π»Π΅Π³ΡΠ°ΠΌ ΠΊΠ°Π½Π°Π» Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ°
UPD 23.02.2020 Π³.:
* Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈΡΠ΅ ΡΠ° ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ΅Π½ΠΈ, ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΠ΅ Π²ΡΡΠ·ΠΊΠΈ ΡΠ° Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ
* ΠΠ΅ΡΡΠΈΡ python-shell==1.0.1 ΡΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Ρ Π·Π° ΠΏΡΡΠΊΠ°Π½Π΅ Π½Π° 29.02.2020 Π³. ΠΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π²ΠΊΠ»ΡΡΠ²Π°Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π΄ΠΎΠ²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° dir(Shell), ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Ρ Π½Π΅Π²Π°Π»ΠΈΠ΄Π΅Π½ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½Π° Python ΠΈ ΠΊΠΎΡΠ΅ΠΊΡΠΈΠΈ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com