рдкрд╛рдЗрдерди рд░ рдмреНрдпрд╛рд╕ рдорд┐рддреНрд░рддрд╛ рдмрдирд╛рдЙрдиреЗ: рд╕реНрдорд╛рд░реНрдЯ-рдПрдирдн рд░ рдкрд╛рдЗрдерди-рд╢реЗрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрд╣рд░реВ

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

рдЖрдЬ, рдкрд╛рдЗрдерди рд╕рдлреНрдЯрд╡реЗрдпрд░ рдЙрддреНрдкрд╛рджрдирд╣рд░реВ рдорд╛рддреНрд░ рд╣реЛрдЗрди, рддрд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рдкреНрд░рджрд╛рди рдЧрд░реНрдиреЗ рдХреНрд╖реЗрддреНрд░рдорд╛ рд╕рдмреИрднрдиреНрджрд╛ рдзреЗрд░реИ рдкреНрд░рдпреЛрдЧ рд╣реБрдиреЗ рднрд╛рд╖рд╛рд╣рд░реВ рдордзреНрдпреЗ рдПрдХ рд╣реЛред рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛, рдзреЗрд░реИ рдбреЗрднреЛрдкрд╣рд░реВрд▓реЗ, рдЪрд╛рд╣реЗ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдЗрдЪреНрдЫрд╛рд▓реЗ рд╡рд╛ рдпрд╕рдХреЛ рд╡рд┐рд░реБрджреНрдзрдорд╛, рд░рд╛рдореНрд░реЛ рдкреБрд░рд╛рдиреЛ рдмрд╛рд╕ рд▓рд┐рдкрд┐рд╣рд░реВрдХреЛ рдкреВрд░рдХрдХреЛ рд░реВрдкрдорд╛ рдкрдЫрд┐ рдкреНрд░рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐ рдирдпрд╛рдБ рднрд╛рд╖рд╛ рд╕рд┐рдХреНрдиреБрдкрд░реНтАНрдпреЛред рдЬреЗ рд╣реЛрд╕реН, Bash рд░ Python рд▓реЗ рдХреЛрдб рд▓реЗрдЦреНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдлрд░рдХ-рдлрд░рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд░рд╛рдЦреНрдЫрдиреН рд░ рдХреЗрд╣реА рд╡рд┐рд╢реЗрд╖рддрд╛рд╣рд░реВ рдЫрдиреН, рдпрд╕рдХреЛ рдорддрд▓рдм рдпреЛ рд╣реЛ рдХрд┐ Bash рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВрд▓рд╛рдИ "рд╕рд╛рдБрдк рднрд╛рд╖рд╛" рдорд╛ рдкреЛрд░реНрдЯ рдЧрд░реНрдиреБ рдХрд╣рд┐рд▓реЗрдХрд╛рд╣реАрдВ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд░ рдорд╛рдореВрд▓реА рдХрд╛рд░реНрдпрдмрд╛рдЯ рдЯрд╛рдврд╛ рдЬрд╛рдиреНрдЫред

рдбреЗрднрдкрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдЬреАрд╡рдирд▓рд╛рдИ рд╕рдЬрд┐рд▓реЛ рдмрдирд╛рдЙрди, рдкрд╛рдЗрдердирдорд╛ рдзреЗрд░реИ рдЙрдкрдпреЛрдЧреА рдкреБрд╕реНрддрдХрд╛рд▓рдпрд╣рд░реВ рд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреН рд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдБрджреИ рдЫрдиреНред рдпрд╕ рд▓реЗрдЦрд▓реЗ рдпрд╕ рдкреЛрд╕реНрдЯрдХреЛ рд▓реЗрдЦрдХрджреНрд╡рд╛рд░рд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХрд╛ рджреБрдИ рдирдпрд╛рдБ рдкреБрд╕реНрддрдХрд╛рд▓рдпрд╣рд░реВрдХреЛ рд╡рд░реНрдгрди рдЧрд░реНрджрдЫ - smart-env ╨╕ python-shell - рд░ рдкрд╛рдЗрдердирд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдиреЗ рдЬрдЯрд┐рд▓рддрд╛рд╣рд░реВрдорд╛ рдзреЗрд░реИ рдзреНрдпрд╛рди рджрд┐рдиреБрдкрд░реНрдиреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛рдмрд╛рдЯ рдбреЗрднрдкрд╣рд░реВрд▓рд╛рдИ рд░рд╛рд╣рдд рджрд┐рди рдбрд┐рдЬрд╛рдЗрди рдЧрд░рд┐рдПрдХреЛ рд╣реЛ, рдердк рд░реЛрдЪрдХ рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдард╛рдЙрдБ рдЫреЛрдбреНрджреИред рдкреБрд╕реНрддрдХрд╛рд▓рдпрд╣рд░реВрдХреЛ рдЧрддрд┐рд╡рд┐рдзрд┐рдХреЛ рджрд╛рдпрд░рд╛ рд╡рд╛рддрд╛рд╡рд░рдгреАрдп рдЪрд░рд╣рд░реВ рд░ рдмрд╛рд╣реНрдп рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ рд╕реБрд░реБ рдЧрд░реНрдиреЗ рд╣реЛред

рдЬреЛ рдХреЛрд╣реА рдЗрдЪреНрдЫреБрдХ рд╣реБрдиреБрд╣реБрдиреНрдЫ, рдХреГрдкрдпрд╛ рдмрд┐рд░рд╛рд▓реЛ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реНред

рдирдпрд╛рдБ "рд╕рд╛рдЗрдХрд▓"?

рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ, рдХрд┐рди рдПрдХрджрдо рд╕рд╛рдорд╛рдиреНрдп рд╕рдЮреНрдЪрд╛рд▓рдирдХрд╛ рд▓рд╛рдЧрд┐ рдирдпрд╛рдБ рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ? рддрдкрд╛рдЗрдБрд▓рд╛рдИ os.environ рд░ subprocess рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдирдмрд╛рдЯ рдХреЗ рд░реЛрдХреНрдЫред <рд╡рд┐рдзрд┐ рд╡рд╛ рддрдкрд╛рдЗрдБрдХреЛ рд░реЛрдЬрд╛рдЗрдХреЛ рд╡рд░реНрдЧ> рд╕реАрдзреИ?

рдо рдкреНрд░рддреНрдпреЗрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпрдХреЛ рдкрдХреНрд╖рдорд╛ рдЫреБрдЯреНрдЯрд╛рдЫреБрдЯреНрдЯреИ рдкреНрд░рдорд╛рдг рдЙрдкрд▓рдмреНрдз рдЧрд░рд╛рдЙрдиреЗрдЫреБред

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

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

рдирддрд┐рдЬрд╛ рдЕрдиреБрд╕рд╛рд░ рдЦреЛрдЬреА рдЧрд░реНрдиреБрд╣реЛрд╕реН рдирд┐рдореНрди рдкреНрд░рдХрдЯ рднрдПрдХреЛ рдерд┐рдпреЛ:

  • рддреНрдпрд╣рд╛рдБ рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВ рдЫрдиреН рдЬреБрди рд╡рд╛рд╕реНрддрд╡рдорд╛ os.environ рдорд╛ рдХрд▓рд╣рд░реВ рд░реНтАНрдпрд╛рдк рдЧрд░реНрджрдЫ, рддрд░ рдПрдХреИ рд╕рдордпрдорд╛ рд╡рд┐рдЪрд▓рд┐рдд рдЧрд░реНрдиреЗ рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рдЧреБрдЪреНрдЫрд╛ рдЪрд╛рд╣рд┐рдиреНрдЫ (рд╡рд░реНрдЧрдХреЛ рдЙрджрд╛рд╣рд░рдг рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ, рдХрд▓рд╣рд░реВрдорд╛ рд╡рд┐рд╢реЗрд╖ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ, рдЗрддреНрдпрд╛рджрд┐);
  • рддреНрдпрд╣рд╛рдБ рд░рд╛рдореНрд░рд╛ рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВ рдЫрдиреН, рдЬреБрди, рддрдерд╛рдкрд┐, рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХ рдкреНрд░рдгрд╛рд▓реА (рдореБрдЦреНрдп рд░реВрдкрдорд╛ рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХрд╣рд░реВ рдЬрд╕реНрддреИ Django) рдорд╛ рдХрдбрд╛ рд░реВрдкрдорд╛ рдмрд╛рдБрдзрд┐рдПрдХрд╛ рдЫрдиреН рд░ рддреНрдпрд╕реИрд▓реЗ рдлрд╛рдЗрд▓ рдмрд┐рдирд╛ рд╕рдмреИ рд╡рд┐рд╢реНрд╡рд╡реНрдпрд╛рдкреА рдЫреИрдирдиреН;
  • рдХреЗрд╣реА рдирдпрд╛рдБ рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рджреБрд░реНрд▓рдн рдЫрдиреНред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдЯрд╛рдЗрдк рдердкреНрдиреБрд╣реЛрд╕реН рд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рдХрд▓ рд╡рд┐рдзрд┐рд╣рд░реВ рдЬрд╕реНрддреИ рдЪрд░ рдорд╛рдирд╣рд░реВ рдкрд╛рд░реНрд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реН
    get_<typename>(var_name)

    рд╡рд╛ рдпрд╣рд╛рдБ рдПрдХ рдердк рд╕рдорд╛рдзрд╛рди, рдЬреБрди, рддрдерд╛рдкрд┐, рдЕрд╣рд┐рд▓реЗ рдЕрдкрдорд╛рдирд┐рдд рдкрд╛рдЗрдерди 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 рдорд╛ рд╣рд╛рд╕рд┐рд▓ рдЧрд░рд┐рдиреНрдЫ, рдХреЗрд╡рд▓ рддреНрдпрд╣рд╛рдБ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд╡рд╕реНрддреБ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЛрдбреНрдпреБрд▓/рдкреНрдпрд╛рдХреЗрдЬ рдЖрдлреИ рд╣реЛ)ред

рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЯрд╛рдЗрдкрд┐рдЩ рд╕рдорд░реНрдерди рдореЛрдб рд╕рдХреНрд╖рдо/рдЕрд╕рдХреНрд╖рдо рдЧрд░реНрдиреЗ рджреБрдИ рд╡рд┐рдзрд┐рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реА рдкреНрд░рд╛рдкреНрдд рд╣реБрдиреНрдЫ - рд╕рдХреНрд╖рдо_рд╕реНрд╡рдЪрд╛рд▓рд┐рдд_рдкреНрд░рдХрд╛рд░_рдХрд╛рд╕реНрдЯ() рд░ рдЕрдХреНрд╖рдо_рд╕реНрд╡рдЪрд╛рд▓рд┐рдд_рдкреНрд░рдХрд╛рд░_рдХрд╛рд╕реНрдЯ ()ред рдпреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реБрди рд╕рдХреНрдЫ рдпрджрд┐ рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░рд▓реЗ рдХреНрд░рдордмрджреНрдз JSON-рдЬрд╕реНрддреЛ рд╡рд╕реНрддреБ рд╡рд╛ рдХреЗрд╡рд▓ рдПрдХ рдмреБрд▓рд┐рдпрди рд╕реНрдерд┐рд░рддрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ (рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ Django рдорд╛ DEBUG рдЪрд░рд▓рд╛рдИ "рдорд╛рдиреНрдп" рд╕реНрдЯреНрд░рд┐рдЩрд╣рд░реВрд╕рдБрдЧ рддреБрд▓рдирд╛ рдЧрд░реЗрд░ рд╕рдмреИрднрдиреНрджрд╛ рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рд╕реНрдерд╛рд╣рд░реВ рдордзреНрдпреЗ рдПрдХ рд╣реЛ)ред рддрд░ рдЕрдм рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рд╕реНрдЯреНрд░рд┐рдЩрд╣рд░реВ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫреИрди - рдзреЗрд░реИ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрд╣рд░реВ рдкрд╣рд┐рд▓реЗ рдиреИ рдкреБрд╕реНрддрдХрд╛рд▓рдпрдХреЛ рдЧрд╣рд┐рд░рд╛рдЗрдорд╛ рдЗрдореНрдмреЗрдб рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреН рд░ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдп рдЧрд░реНрди рд╕рдВрдХреЗрддрдХреЛ рд▓рд╛рдЧрд┐ рдкрд░реНрдЦрд┐рд░рд╣реЗрдХрд╛ рдЫрдиреНред ЁЯЩВ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рдЯрд╛рдЗрдкрд┐рдЩрд▓реЗ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░реНрджрдЫ рд░ рд▓рдЧрднрдЧ рд╕рдмреИ рдЙрдкрд▓рдмреНрдз рдирд┐рд░реНрдорд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░рд╣рд░реВрд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫ (рдлреНрд░реЛрдЬрдирд╕реЗрдЯ, рдЬрдЯрд┐рд▓ рд░ рдмрд╛рдЗрдЯрд╣рд░реВ рдкрд░реАрдХреНрд╖рдг рдЧрд░рд┐рдПрдХреЛ рдерд┐рдПрди)ред

рдкрд╛рдЗрдерди 2 рд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрдиреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╕реНрддреБрддрдГ рдХреБрдиреИ рддреНрдпрд╛рдЧрд╣рд░реВ рдмрд┐рдирд╛ рд▓рд╛рдЧреВ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ (рдЯрд╛рдЗрдкрд┐рдЩрдХреЛ рдкрд░рд┐рддреНрдпрд╛рдЧ рд░ рдкрд╛рдЗрдерди 3 рдХреЛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВрдХреЛ рдХреЗрд╣реА "рдЪрд┐рдиреА рдХреНрдпрд╛рдиреНрдбреАрд╣рд░реВ"), рд╡рд┐рд╢реЗрд╖ рдЧрд░реА, рд╕рд░реНрд╡рд╡реНрдпрд╛рдкреА рдЫ (рдореЗрдЯрд╛рдХреНрд▓рд╛рд╕рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди) рд▓рд╛рдИ рдзрдиреНрдпрд╡рд╛рджред )ред

рддрд░ рддреНрдпрд╣рд╛рдБ рдХреЗрд╣реА рдкреНрд░рддрд┐рдмрдиреНрдзрд╣рд░реВ рдЫрдиреН:

  • рдкрд╛рдЗрдерди 3 рд╕рдорд░реНрдерди рднрдиреЗрдХреЛ рд╕рдВрд╕реНрдХрд░рдг 3.5 рд░ рдЙрдЪреНрдЪ рд╣реЛ (рддрдкрд╛рдИрдБрдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрддрд┐рдиреАрд╣рд░реВрдХреЛ рдЙрдкрд╕реНрдерд┐рддрд┐ рдпрд╛ рдд рдЖрд▓рд╕реНрдп рд╡рд╛ рд╕реБрдзрд╛рд░рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдХреЛ рдХрдореАрдХреЛ рдкрд░рд┐рдгрд╛рдо рд╣реЛ, рдХрд┐рдирдХрд┐ рддрдкрд╛рдИ рдЕрдЭреИ 3.4 рдорд╛ рд╣реБрдиреБрдХреЛ рдЙрджреНрджреЗрд╢реНрдпрдХреЛ рд╕рд╛рде рдЖрдЙрди рдЧрд╛рд╣реНрд░реЛ рдЫ);
  • Python 2.7 рдорд╛, рдкреБрд╕реНрддрдХрд╛рд▓рдпрд▓реЗ рд╕реЗрдЯ рд▓рд┐рдЯрд░рд▓рд╣рд░реВрдХреЛ рдбрд┐рд╕реЗрд░рд┐рдпрд▓рд╛рдЗрдЬреЗрд╕рдирд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджреИрдиред рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдБред рддрд░ рдпрджрд┐ рдХрд╕реИрд▓реЗ рдпрд╕рд▓рд╛рдИ рд▓рд╛рдЧреВ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдИрдВрд▓рд╛рдИ рд╕реНрд╡рд╛рдЧрдд рдЫ :);

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

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

рдЕрдм рдо рддрдкрд╛рдИрдВрд▓рд╛рдИ рджреЛрд╕реНрд░реЛ рдкреБрд╕реНрддрдХрд╛рд▓рдпрдХреЛ рдмрд╛рд░реЗрдорд╛ рдмрддрд╛рдЙрдиреЗрдЫреБ (рдо рдЕрд╡рд╕реНрдерд┐рдд рдПрдирд╛рд▓рдЧрд╣рд░реВрдХреЛ рдХрдореАрд╣рд░реВрдХреЛ рд╡рд┐рд╡рд░рдг рдЫреЛрдбреНрдиреЗрдЫреБ - рдпреЛ рд╕реНрдорд╛рд░реНрдЯ-рдПрдирднрд┐ред рдПрдирд╛рд▓рдЧрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдЬрд╕реНрддреИ рдЫред рдпрд╣рд╛рдБ ╨╕ рдпрд╣рд╛рдБ).

рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рд╡рд┐рдЪрд╛рд░ рд░ рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВ 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. рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд╕ рдЖрджреЗрд╢рд▓рд╛рдИ рд╢реЗрд▓ рд╡рд░реНрдЧрдХреЛ рдкреНрд░рдХрд╛рд░реНрдп рднрдирд┐рдиреНрдЫ;
  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. рдкрд╛рдЗрдерди-рд╢реЗрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп: Github ╨╕ PyPI
  3. рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдо рдЪреНрдпрд╛рдирд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрджреНрдпрд╛рд╡рдзрд┐рдХрд╣рд░реВ

UPD режреи/реирей/реирежреиреж:
* рднрдгреНрдбрд╛рд░рд╣рд░реВ рд╕рд╛рд░рд┐рдПрдХрд╛ рдЫрдиреН, рд╕рдореНрдмрдиреНрдзрд┐рдд рд▓рд┐рдЩреНрдХрд╣рд░реВ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреН
* рд╕рдВрд╕реНрдХрд░рдг python-shell==1.0.1 29.02.2020/XNUMX/XNUMX рдорд╛ рд░рд┐рд▓реАрдЬрдХреЛ рд▓рд╛рдЧрд┐ рддрдпрд╛рд░ рднрдЗрд░рд╣реЗрдХреЛ рдЫред рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВрд▓реЗ рдЖрджреЗрд╢ рд╕реНрд╡рдд: рдкреВрд░реНрдг рд░ dir(Shell) рдЖрджреЗрд╢рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдерди, рдЕрд╡реИрдз рдкрд╛рдЗрдерди рдкрд╣рд┐рдЪрд╛рдирдХрд░реНрддрд╛рд╕рдБрдЧ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдЖрджреЗрд╢рд╣рд░реВ, рд░ рдмрдЧ рд╕рдорд╛рдзрд╛рдирд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред

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

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