ΠΠΎΠ±ΡΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡΡΠΎΠΊ Π²ΡΠ΅ΠΌ!
29 ΡΠ΅Π²ΡΠ°Π»Ρ 2020 Π³ΠΎΠ΄Π° ΡΠΎΡΡΠΎΡΠ»ΡΡ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΌΠΈΠΊΡΠΎ-ΡΠ΅Π»ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ smart-env ΠΈ python-shell. Π’Π΅ΠΌ, ΠΊΡΠΎ Π½Π΅ Π² ΠΊΡΡΡΠ΅, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ
ΠΡΠ»ΠΈ Π²ΠΊΡΠ°ΡΡΠ΅, ΡΠΎ ΡΡΠ΅Π΄ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ β Π°Π²ΡΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄, ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΏΠΎ Π·Π°ΠΏΡΡΠΊΡ ΠΊΠΎΠΌΠ°Π½Π΄, Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³Π° ΠΈ Π±Π°Π³ΡΠΈΠΊΡΠΎΠ².
ΠΠ° Π΄Π΅ΡΠ°Π»ΡΠΌΠΈ ΠΏΡΠΎΡΡ ΠΏΠΎΠ΄ ΠΊΠ°Ρ.
Π§ΡΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π² python-shell?
ΠΠ°ΡΠ½Ρ ΡΡΠ°Π·Ρ Ρ Π΄Π΅ΡΠ΅ΡΡΠ°.
ΠΠ²ΡΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄
Π‘ΠΎΠ³Π»Π°ΡΠΈΡΠ΅ΡΡ β ΡΠ΄ΠΎΠ±Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΡΠ΅Π΄Π°ΠΊΡΠΎΡ/IDE/ΡΠ΅ΡΠΌΠΈΠ½Π°Π» ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π° ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π²ΡΠ·ΠΎΠ²Π°? ΠΠΎΡ ΠΈ python-shell ΠΏΠΎΠ½Π΅ΠΌΠ½ΠΎΠ³Ρ ΠΏΡΠΎΠ΄Π²ΠΈΠ³Π°Π΅ΡΡΡ Π² ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π°. Π ΡΠ²ΡΠ·ΠΈ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΏΠΎΠ»Ρ ΠΊΠ»Π°ΡΡΠ° Shell ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌ de-facto Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ Π΅Π³ΠΎ ΠΏΠΎΠ»ΡΠΌΠΈ (Π²Π΅Π·Π΄Π΅ΡΡΡΠΈΠΉ __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.
Π Π΄Π°ΡΠ°Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠ΅Π»ΠΈΠ·ΠΎΠ² Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΊΠ°Π½Π°Π»Π°Ρ ΡΠ²ΡΠ·ΠΈ:
Telegram-ΠΊΠ°Π½Π°Π» (ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ) Twitter - ΠΠΏΠ΄Π΅ΠΉΡΠΎΠΌ Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com