Python рд░ Bash Friendship рдмрдирд╛рдЙрдиреЗ: python-shell рд░ smart-env v рдкреБрд╕реНрддрдХрд╛рд▓рдпрд╣рд░реВрдХреЛ рд░рд┐рд▓реАрдЬред рез.реж.рез

рд╢реБрдн рджрд┐рди рд╕рдмреИрд▓рд╛рдИ!

29 рдлреЗрдмреНрд░реБрдЕрд░реА 2020 рд╡рд░реНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдпрд╣рд░реВрдХреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдорд╛рдЗрдХреНрд░реЛ-рд╡рд┐рдореЛрдЪрди рднрдпреЛ smart-env ╨╕ python-shellред рдерд╛рд╣рд╛ рдирднрдПрдХрд╛рд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐, рдо рд╕реБрдЭрд╛рд╡ рджрд┐рдиреНрдЫреБ рдХрд┐ рддрдкрд╛рдЗрдБ рдпрд╕рд▓рд╛рдИ рдкрд╣рд┐рд▓реЗ рдкрдвреНрдиреБрд╣реЛрд╕реН рдкрд╣рд┐рд▓реЛ рдкреЛрд╕реНрдЯ.

рдЫреЛрдЯрдХрд░реАрдорд╛, рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВрд▓реЗ рдХрдорд╛рдгреНрдб рдкреВрд░рд╛ рдЧрд░реНрдиреЗ, рдЖрджреЗрд╢рд╣рд░реВ рдЪрд▓рд╛рдЙрдирдХрд╛ рд▓рд╛рдЧрд┐ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХреНрд╖рдорддрд╛рд╣рд░реВ, рдХреЗрд╣реА рд░рд┐рдлреНрдпрд╛рдХреНрдЯрд░рд┐рдЩ рд░ рдмрдЧ рдлрд┐рдХреНрд╕рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред

рд╡рд┐рд╡рд░рдгрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдХреГрдкрдпрд╛ рдмрд┐рд░рд╛рд▓реЛ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реНред

рдкрд╛рдЗрдерди-рд╢реЗрд▓рдорд╛ рдирдпрд╛рдБ рдХреЗ рдЫ?

рдо рддреБрд░реБрдиреНрддреИ рдорд┐рдард╛рдИ рд╕рдВрдЧ рд╕реБрд░реБ рдЧрд░реНрдиреЗрдЫреБред

рдЖрджреЗрд╢ рдкреВрд░рд╛

рд╕рд╣рдордд рд╣реБрдиреБрд╣реБрдиреНрдЫ - рдпреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЫ рдЬрдм рд╕рдореНрдкрд╛рджрдХ/IDE/рдЯрд░реНрдорд┐рдирд▓рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЖрджреЗрд╢рдХреЛ рдирд╛рдо, рд░ рдХрд╣рд┐рд▓реЗрдХрд╛рд╣реАрдБ рдХрд▓ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░реЛрдореНрдкреНрдЯ рдЧрд░реНрджрдЫ? рддреНрдпрд╕реИрд▓реЗ рдкрд╛рдЗрдерди-рд╢реЗрд▓рд▓реЗ рдмрд┐рд╕реНрддрд╛рд░реИ рд╕рдорд╛рди рдкреНрд░рдХрд╛рд░реНрдпрддрд╛ рдкреНрд░рджрд╛рди рдЧрд░реНрди рдкреНрд░рдЧрддрд┐ рдЧрд░реНрджреИрдЫред рд╣реБрдб рдЕрдиреНрддрд░реНрдЧрдд рд╢реЗрд▓ рд╡рд░реНрдЧрдХреЛ рдлрд┐рд▓реНрдбрд╣рд░реВ рдпрд╕рдХреЛ рдлрд┐рд▓реНрдбрд╣рд░реВ (рд╕рд░реНрд╡рд╡реНрдпрд╛рдкреА __getattr__) рд╣реЛрдЗрди рднрдиреНрдиреЗ рддрдереНрдпрдХрд╛ рдХрд╛рд░рдг, рд╕реНрд╡рдд: рдкреВрд░реНрдгрддрд╛ рдкрдирд┐ рд╕реНрдХреНрд░реНрдпрд╛рдЪрдмрд╛рдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ (рдХреНрд░рдорд╢рдГ __dir__ рд╡рд┐рдзрд┐ рдУрднрд░рд▓реЛрдб рдЧрд░реЗрд░)ред рд╕реНрд╡рдд: рдкреВрд░реНрдгрддрд╛рд▓реЗ рд╣рд╛рд▓ BPython рд░ IPython рд╡рд╛рддрд╛рд╡рд░рдгрдорд╛ рдХрд╛рдо рдЧрд░реНрдЫред рдЕрд╡рд╢реНрдп рдкрдирд┐, рдо PyCharm рдЬрд╕реНрддрд╛ рдЕрдзрд┐рдХ рдЖрджрд░рдгреАрдп рдЙрддреНрдкрд╛рджрдирд╣рд░реВрд╕рдБрдЧ рдПрдХреАрдХрд░рдг рд╣реЗрд░реНрди рдЪрд╛рд╣рдиреНрдЫреБ, рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдореНрднрд╛рд╡рдирд╛рд╣рд░реВ рдпрд╕ рджрд┐рд╢рд╛рдорд╛ рдЕрдзреНрдпрдпрди рднрдЗрд░рд╣реЗрдХреЛ рдЫред

рдЧреБрдгрд╣рд░реВ рдердкреНрджреИ

рд░рд┐рд▓реАрдЬрдХреЛ рднрд╛рдЧрдХреЛ рд░реВрдкрдорд╛, рд╢реЗрд▓ рд╡рд░реНрдЧрд▓реЗ рдирдпрд╛рдБ рдЕрдиреНрддрд┐рдо_рдХрдорд╛рдгреНрдб рдЧреБрдг рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдпреЛред рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЙрддреНрдкрдиреНрди рднрдпреЛ рдХрд┐рдирднрдиреЗ рдЬрдм ShellException рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рд░рд┐рдЯрд░реНрди рдХреЛрдбрдХреЛ рд╕рд╛рде рдХрдорд╛рдгреНрдбрджреНрд╡рд╛рд░рд╛ рдлреНрдпрд╛рдБрдХрд┐рдПрдХреЛ рдерд┐рдпреЛ, рдЖрджреЗрд╢ рд╡рд╕реНрддреБрд▓рд╛рдИ __call__() рдХрд▓рдмрд╛рдЯ рдЖрджреЗрд╢ рд╡рд╕реНрддреБрдорд╛ рдлрд░реНрдХрд╛рдЗрдПрдХреЛ рдерд┐рдПрдиред рдЕрдм рдпреЛ рдЧрд░реНрди рдХреЛ рд▓рд╛рдЧреА рдПрдХ рдЕрд╡рд╕рд░ рдЫ:

try:
    command = Shell.touch('/foo.txt')
except ShellException:
    command = Shell.last_command

рдЖрджреЗрд╢ рд╡рд╕реНрддреБрдХреЛ рдЧреБрдгрд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкрдирд┐ рд╡рд┐рд╕реНрддрд╛рд░ рднрдПрдХреЛ рдЫред рддреНрд░реБрдЯрд┐ рд╕реНрдЯреНрд░рд┐рдордорд╛ рдЖрджреЗрд╢ рдЖрдЙрдЯрдкреБрдЯ рдлрд░реНрдХрд╛рдЙрдиреЗ рддреНрд░реБрдЯрд┐ рдХреНрд╖реЗрддреНрд░ рдердкрд┐рдпреЛред

рдЕрд╡реИрдз рдкрд╛рдЗрдерди рдирд╛рдорд╣рд░реВрд╕рдБрдЧ рдЖрджреЗрд╢рд╣рд░реВ рдЪрд▓рд╛рдЙрдБрджреИ

рд▓рдЧрднрдЧ рд╣рд░реЗрдХ рдкреНрд░рдгрд╛рд▓реАрдорд╛ рдХрдореНрддрд┐рдорд╛ рдПрдЙрдЯрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реБрдиреНрдЫ рдЬрд╕рдХреЛ рдирд╛рдо рдкрд╛рдЗрдердирдорд╛ рдкрд╣рд┐рдЪрд╛рдирдХрд░реНрддрд╛рдХреЛ рд░реВрдкрдорд╛ рдЙрдкрдпреБрдХреНрдд рдЫреИрди (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдкреНрд░рдЦреНрдпрд╛рдд 2to3 рдЙрдкрдпреЛрдЧрд┐рддрд╛)ред рдЙрд╕рд▓рд╛рдИ рд╕рдВрдЧ рдмреЛрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН

Shell.2to3()

рдпрджрд┐ рдпрд╕рд▓реЗ рдХрд╛рдо рдЧрд░реНрджреИрди рднрдиреЗ, рдЕрдиреБрд╡рд╛рджрдХрд▓реЗ рдпрд╕рд▓рд╛рдИ рдкрд╛рд░ рдЧрд░реНрди рджрд┐рдиреЗрдЫреИрдиред
рд╕рдорд╛рдзрд╛рди рднрдиреЗрдХреЛ рд░рд╛рдЙрдиреНрдбрдЕрдмрд╛рдЙрдЯ рддрд░рд┐рдХрд╛рдорд╛ рдЖрджреЗрд╢рд▓рд╛рдИ рдХрд▓ рдЧрд░реНрдиреБ рд╣реЛ:

Shell("2to3")  # ╨▓╨╛╨╖╨▓╤А╨░╤Й╨░╨╡╤В ╨╛╨▒╤К╨╡╨║╤В ╨║╨╛╨╝╨░╨╜╨┤╤Л

рдпреЛ рдзреНрдпрд╛рди рджрд┐рди рд▓рд╛рдпрдХ рдЫ рдХрд┐ рддреНрдпрд╕реИ рдЧрд░реА рддрдкрд╛рдИрд▓реЗ рдЖрджреЗрд╢рд╣рд░реВ рдЪрд▓рд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдЬреБрди рдЕрдиреБрд╡рд╛рджрдХрдХреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгрдмрд╛рдЯ рдорд╛рдиреНрдп рдЫ, рдЬрд╕рд▓реЗ рд▓рдЪрд┐рд▓реЛ рд▓рд┐рдкрд┐рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдЕрд╡рд╕рд░ рдЫреЛрдбреНрдЫред

cmd = "python{}".format(sys.version_info[0])
Shell(cmd)(*args, **kwargs)

рд╕рд╛рдирд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ

  • рдЖрджреЗрд╢ рд╡рд░реНрдЧ рд╡рд╕реНрддреБрдХреЛ __repr__() рд░ __str__() рд╡рд┐рдзрд┐рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░рд┐рдПрдХреЛ рдЫ, рдЬрд╕рд▓реЗ рдЕрдм рд╕рд╣рдЬ рдорд╛рдирд╣рд░реВ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрджрдЫ (рдХреНрд░рдорд╢рдГ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рд░ рдпрд╕рдХреЛ stdout рдЖрдЙрдЯрдкреБрдЯрд╕рд╣рд┐рддрдХреЛ рдЖрджреЗрд╢)ред
  • рдорд╛рдЗрдирд░ рдХреЛрдб рдлрд┐рдХреНрд╕рд╣рд░реВред
  • рдкрд░реАрдХреНрд╖рдг рдХрднрд░реЗрдЬ рдердкреНрджреИ, рд╕рд╛рдереИ рдЕрд╡рд╕реНрдерд┐рддрд╣рд░реВрд▓рд╛рдИ рдкреБрди: рд╕рдВрдЧрдард┐рдд рдЧрд░реНрджреИред
  • рд╕рдмрдкреНрд░реЛрд╕реЗрд╕ рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд░реНрдЧрд╣рд░реВ рдердкреНрджреИ, рдЬрд╕рдХреЛ рдЙрджреНрджреЗрд╢реНрдп рд╕рдмрдкреНрд░реЛрд╕реЗрд╕ рдореЛрдбреНрдпреБрд▓рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджрд╛ рдЕрдореВрд░реНрддрддрд╛рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрддрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБ рд╣реЛред Python 2/3 рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджрд╛ рдХреЛрдб рдирдХреНрдХрд▓ рд╣рдЯрд╛рдЙрди рдкреНрд░рд╛рдпрдГ рдЖрд╡рд╢реНрдпрдХ рдЫ, рддрд░ рд╕рдореНрднрд╛рд╡рд┐рдд рд░реВрдкрдорд╛ рдЕрдиреНрдп рдмреЛрдирд╕рд╣рд░реВ рдкрдирд┐ рдкреНрд░рджрд╛рди рдЧрд░реНрди рд╕рдХреНрдЫред

smart-env рдорд╛ рдирдпрд╛рдБ рдХреЗ рдЫ?

python-shell рдХреЛ рд╡рд┐рдкрд░реАрдд, smart-env рдкреБрд╕реНрддрдХрд╛рд▓рдпрдорд╛ рдХрдо рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рднрдПрдХрд╛ рдЫрдиреНред рдпрд╕рдХреЛ рдХрд╛рд░рдг рд╕рд░рд▓ рдЫ - рдЦрд╛рд▓реА рд╕рдордпрдХреЛ рдЕрднрд╛рд╡, рдЬрд╕рдХреЛ рд╕рдордпрдорд╛ рдХреЗрд╣реА рд╕рдореНрднрд╛рд╡рд┐рдд рд╕реБрдзрд╛рд░рд╣рд░реВ (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░рд╣рд░реВрдХреЛ рд╕реНрд╡рдд: рдкреВрд░реНрдгрддрд╛) рдЕрд░реНрдХреЛ рд░рд┐рд▓реАрдЬрдорд╛ рд╕рд╛рд░рд┐рдпреЛред

рд╡рд╛рд╕реНрддрд╡рдорд╛, рдкреБрд╕реНрддрдХрд╛рд▓рдпрдорд╛ рдирд┐рдореНрди рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреН:

  • рдорд╛рдЗрдирд░ рдХреЛрдб рдлрд┐рдХреНрд╕рд╣рд░реВред
  • рд░рд┐рдлреНрдпрд╛рдХреНрдЯрд░рд┐рдЩред
  • рдЕрд╡рд╕реНрдерд┐рдд рдкрд░реАрдХреНрд╖рдгрд╣рд░реВрдХреЛ рдкреБрдирд░реНрдЧрдарди рд░ рдкрд░рд┐рдорд╛рд░реНрдЬрдиред

рдЕрд░реНрдХреЛ рд░рд┐рд▓реАрдЬрдХреЛ рд▓рд╛рдЧрд┐ рдпреЛрдЬрдирд╛рд╣рд░реВ

рдкрд╛рдЗрдерди-рд╢реЗрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп

  • рдЧреИрд░-рдмреНрд▓рдХрд┐рдЩ рдХрдорд╛рдгреНрдб рдХрд▓рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдерди рдердкреНрджреИ (рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рд╕рдорд╛рдирд╛рдиреНрддрд░)ред

smart-env рдкреБрд╕реНрддрдХрд╛рд▓рдп

  • ENV рдХрдХреНрд╖рд╛рдорд╛ рд╡рд╛рддрд╛рд╡рд░рдгреАрдп рдЪрд░рд╣рд░реВрдХреЛ рд╕реНрд╡рдд: рдкреВрд░реНрдгрддрд╛рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред
  • env рдЪрд░рдХреЛ рдЕрд╕реНрддрд┐рддреНрд╡ рдЬрд╛рдБрдЪ рдЧрд░реНрди in рдЕрдкрд░реЗрдЯрд░рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдердиред
  • ENV рд╡рд░реНрдЧрдХреЛ рд▓рд╛рдЧрд┐ str() рд░ repr() рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдердирдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред

рдЕрд░реНрдХреЛ рд░рд┐рд▓реАрдЬрдХреЛ рдорд┐рддрд┐рд╣рд░реВ рдирд┐рдореНрди рд╕рдЮреНрдЪрд╛рд░ рдЪреНрдпрд╛рдирд▓рд╣рд░реВрдорд╛ рдердк рдШреЛрд╖рдгрд╛ рдЧрд░рд┐рдиреЗрдЫ:

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди