рдкрд╛рдЗрдереЙрди рдФрд░ рдмреИрд╢ рдлреНрд░реЗрдВрдбрд╢рд┐рдк рдмрдирд╛рдирд╛: рдкрд╛рдЗрдереЙрди-рд╢реЗрд▓ рдФрд░ рд╕реНрдорд╛рд░реНрдЯ-рдПрдирд╡реА рд╡реА рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХрд╛ рд╡рд┐рдореЛрдЪрдиред 1.0.1

рд╕рднреА рдХреЛ рд╢реБрдн рджрд┐рди!

рдлрд╝рд░рд╡рд░реА 29 2020 рд╕рд╛рд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реВрдХреНрд╖реНрдо-рд╡рд┐рдореЛрдЪрди рд╣реБрдЖ рд╕реНрдорд╛рд░реНрдЯ-рдПрдирд╡реА ╨╕ рдЕрдЬрдЧрд░-рдЦреЛрд▓. рдЬреЛ рд▓реЛрдЧ рдирд╣реАрдВ рдЬрд╛рдирддреЗ, рдЙрдирдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рдЗрд╕реЗ рдкрдврд╝ рд▓реЗрдВ рдкрд╣рд┐рд▓рд╛ рдкрдж.

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдореЗрдВ рдХрдорд╛рдВрдб рдкреВрд░реНрдгрддрд╛, рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХреНрд╖рдорддрд╛рдПрдВ, рдХреБрдЫ рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдФрд░ рдмрдЧ рдлрд┐рдХреНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдХреГрдкрдпрд╛ рдмрд┐рд▓реНрд▓реА рджреЗрдЦреЗрдВред

рдкрд╛рдпрдерди-рд╢реЗрд▓ рдореЗрдВ рдирдпрд╛ рдХреНрдпрд╛ рд╣реИ?

рдореИрдВ рддреБрд░рдВрдд рдорд┐рдард╛рдИ рд╕реЗ рд╢реБрд░реБрдЖрдд рдХрд░реВрдВрдЧрд╛ред

рдЖрджреЗрд╢ рдкреВрд░рд╛ рд╣реЛрдирд╛

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

рдЧреБрдг рдЬреЛрдбрд╝рдирд╛

рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рд╢реЗрд▓ рдХреНрд▓рд╛рд╕ рдХреЛ рдПрдХ рдирдИ рдЕрдВрддрд┐рдо_рдХрдорд╛рдВрдб рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реБрдИред рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЗрд╕рд▓рд┐рдП рдкрдбрд╝реА рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдПрдХ рд╢реЗрд▓рдПрдХреНрд╕реЗрдкреНрд╢рди рдХреЛ рдЧреИрд░-рд╢реВрдиреНрдп рд░рд┐рдЯрд░реНрди рдХреЛрдб рд╡рд╛рд▓реЗ рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдХрдорд╛рдВрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ __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__() рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЕрдм рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рдорд╛рди (рдХреНрд░рдорд╢рдГ рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рдЙрд╕рдХреЗ рд╕реНрдЯрдбрдЖрдЙрдЯ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдорд╛рдВрдб) рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред
  • рдорд╛рдореВрд▓реА рдХреЛрдб рдареАрдХ рдХрд░рддрд╛ рд╣реИ.
  • рдкрд░реАрдХреНрд╖рдг рдХрд╡рд░реЗрдЬ рдЬреЛрдбрд╝рдирд╛, рд╕рд╛рде рд╣реА рдореМрдЬреВрджрд╛ рдХрд╡рд░реЗрдЬ рдХреЛ рдкреБрдирд░реНрдЧрдард┐рдд рдХрд░рдирд╛ред
  • рд╕рдмрдкреНрд░реЛрд╕реЗрд╕ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕рдмрдкреНрд░реЛрд╕реЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЕрдореВрд░реНрддрддрд╛ рдХрд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрддрд░ рдмрдирд╛рдирд╛ рд╣реИред рдкрд╛рдпрдерди 2/3 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдХреЛрдб рдбреБрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЕрдиреНрдп рдмреЛрдирд╕ рднреА рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕реНрдорд╛рд░реНрдЯ-рдПрдирд╡реА рдореЗрдВ рдирдпрд╛ рдХреНрдпрд╛ рд╣реИ?

рдкрд╛рдпрдерди-рд╢реЗрд▓ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕реНрдорд╛рд░реНрдЯ-рдПрдирд╡реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдХрдо рдмрджрд▓рд╛рд╡ рд╣реБрдП рд╣реИрдВред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рд╕рд░рд▓ рд╣реИ - рдЦрд╛рд▓реА рд╕рдордп рдХреА рдХрдореА, рдЬрд┐рд╕рдХреЗ рджреМрд░рд╛рди рдХреБрдЫ рд╕рдВрднрд╛рд╡рд┐рдд рд╕реБрдзрд╛рд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рд╣реЛрдирд╛) рдХреЛ рдЕрдЧрд▓реА рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ред

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

  • рдорд╛рдореВрд▓реА рдХреЛрдб рдареАрдХ рдХрд░рддрд╛ рд╣реИ.
  • рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧред
  • рдореМрдЬреВрджрд╛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдкреБрдирд░реНрдЧрдарди рдФрд░ рдкрд░рд┐рд╢реЛрдзрдиред

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

рдкрд╛рдпрдерди-рд╢реЗрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА

  • рдиреЙрди-рдмреНрд▓реЙрдХрд┐рдВрдЧ рдХрдорд╛рдВрдб рдХреЙрд▓ (рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░реАрдХрд░рдг) рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдирд╛ред

рд╕реНрдорд╛рд░реНрдЯ-рдПрдирд╡реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА

  • рдИрдПрдирд╡реА рд╡рд░реНрдЧ рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рд╕реНрд╡рдд: рдкреВрд░реНрдгрддрд╛ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред
  • рдПрдирд╡реА рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдСрдкрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдердиред
  • ENV рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП str() рдФрд░ repr() рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред

рдЕрдЧрд▓реА рд░рд┐рд▓реАрдЬрд╝ рдХреА рддрд╛рд░реАрдЦреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрдЪрд╛рд░ рдЪреИрдирд▓реЛрдВ рдореЗрдВ рдХреА рдЬрд╛рдПрдЧреА:

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ