ื™ืฆื™ืจืช ื™ื“ื™ื“ื•ืช ืฉืœ Python ื•-Bash: ืฉื—ืจื•ืจ ืกืคืจื™ื•ืช python-shell ื•-smart-env v. 1.0.1

ืกื•ื’ ื”ื–ืžืŸ ืฉืœ ื›ื•ืœื ื›ื•ืœื!

ืคื‘ื•ืืจ 29 2020 ืฉื ื™ื ื”ื•ืฆืืช ืžื™ืงืจื• ืจืฉืžื™ืช ืฉืœ ืกืคืจื™ื•ืช ื”ืชืจื—ืฉื” smart-env ะธ ืžืขื˜ืคืช ืคื™ืชื•ืŸ. ืœืžื™ ืฉืœื ื™ื•ื“ืข, ืื ื™ ืžืฆื™ืข ืฉืชืงืจื ืื•ืชื• ืงื•ื“ื ืคื•ืกื˜ ืจืืฉื•ืŸ.

ื‘ืงืฆืจื”, ื”ืฉื™ื ื•ื™ื™ื ื›ื•ืœืœื™ื ื”ืฉืœืžืช ืคืงื•ื“ื•ืช, ื™ื›ื•ืœื•ืช ืžื•ืจื—ื‘ื•ืช ืœื”ืคืขืœืช ืคืงื•ื“ื•ืช, ื›ืžื” ืขื™ื‘ื•ื“ ืžื—ื“ืฉ ื•ืชื™ืงื•ื ื™ ื‘ืื’ื™ื.

ืœืคืจื˜ื™ื ืื ื ืจืื” ื—ืชื•ืœ.

ืžื” ื—ื“ืฉ ื‘-python-shell?

ืื ื™ ืืชื—ื™ืœ ืžื™ื“ ืขื ืงื™ื ื•ื—.

ื”ืฉืœืžืช ืคืงื•ื“ื”

ืžืกื›ื™ื - ื–ื” ื ื•ื— ื›ืฉื”ืขื•ืจืš/IDE/ื˜ืจืžื™ื ืœ ืžื‘ืงืฉื™ื ืžืžืš ืืช ืฉื ื”ืคืงื•ื“ื”, ื•ืœืคืขืžื™ื ืืคื™ืœื• ืืช ืคืจืžื˜ืจื™ ื”ืฉื™ื—ื”? ืื– python-shell ืžืชืงื“ืžืช ื‘ื”ื“ืจื’ื” ื‘ืžืชืŸ ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื“ื•ืžื”. ื‘ืฉืœ ื”ืขื•ื‘ื“ื” ืฉื”ืฉื“ื•ืช ืฉืœ ืžื—ืœืงืช ื”-Shell ืžืชื—ืช ืœืžื›ืกื” ื”ืžื ื•ืข ื”ื ื“ื”-ืคืงื˜ื• ืœื ื”ืฉื“ื•ืช ืฉืœื• (__getattr__ ื”ื ืžืฆื ื‘ื›ืœ ืžืงื•ื), ื ื•ืฆืจื” ื”ืฉืœืžื” ืื•ื˜ื•ืžื˜ื™ืช ื’ื ืžืืคืก (ืขืœ ื™ื“ื™ ื”ืขืžืกืช ื™ืชืจ ืฉืœ ืฉื™ื˜ืช __dir__, ื‘ื”ืชืืžื”). ื”ืฉืœืžื” ืื•ื˜ื•ืžื˜ื™ืช ืคื•ืขืœืช ื›ื™ื•ื ื‘ืกื‘ื™ื‘ื•ืช BPython ื•-IPython. ื›ืžื•ื‘ืŸ, ื”ื™ื™ืชื™ ืจื•ืฆื” ืœืจืื•ืช ืื™ื ื˜ื’ืจืฆื™ื” ืขื ืžื•ืฆืจื™ื ืžื›ื•ื‘ื“ื™ื ื™ื•ืชืจ ื›ืžื• PyCharm, ื•ืืคืฉืจื•ื™ื•ืช ื™ื™ืฉื•ื ื ื‘ื“ืงื•ืช ื‘ื›ื™ื•ื•ืŸ ื–ื”.

ื”ื•ืกืคืช ืžืืคื™ื™ื ื™ื

ื›ื—ืœืง ืžื”ื”ืคืฆื”, ื”ืžื—ืœืงื” Shell ืงื™ื‘ืœื” ืžืืคื™ื™ืŸ last_command ื—ื“ืฉ. ื”ืฆื•ืจืš ื‘ื›ืš ื”ืชืขื•ืจืจ ืžื›ื™ื•ื•ืŸ ืฉื›ืืฉืจ ื ื–ืจืง ShellException ืขืœ ื™ื“ื™ ืคืงื•ื“ื” ืขื ืงื•ื“ ื”ื—ื–ืจื” ืฉืื™ื ื• ืืคืก, ืื•ื‘ื™ื™ืงื˜ ื”-Command ืœื ื”ื•ื—ื–ืจ ืžื”ืงืจื™ืื” __call__() ืœืื•ื‘ื™ื™ืงื˜ ื”ืคืงื•ื“ื”. ืขื›ืฉื™ื• ื™ืฉ ื”ื–ื“ืžื ื•ืช ืœืขืฉื•ืช ืืช ื–ื”:

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

ื’ื ืจืฉื™ืžืช ื”ืžืืคื™ื™ื ื™ื ืฉืœ ืื•ื‘ื™ื™ืงื˜ ื”ืคืงื•ื“ื” ื”ืชืจื—ื‘ื”. ื ื•ืกืฃ ืฉื“ื” ืฉื’ื™ืื•ืช ืฉืžื—ื–ื™ืจ ืืช ืคืœื˜ ื”ืคืงื•ื“ื” ืœื–ืจื ื”ืฉื’ื™ืื•ืช.

ื”ืคืขืœืช ืคืงื•ื“ื•ืช ืขื ืฉืžื•ืช Python ืœื ื—ื•ืงื™ื™ื

ื›ืžืขื˜ ืœื›ืœ ืžืขืจื›ืช ื™ืฉ ืœืคื—ื•ืช ืชื•ื›ื ื™ืช ืื—ืช ืฉืฉืžื” ืื™ื ื• ืžืชืื™ื ื›ืžื–ื”ื” ื‘-Python (ืœื“ื•ื’ืžื”, ื›ืœื™ ื”ืฉื™ืจื•ืช ื”ื™ื“ื•ืข 2to3). ืชืชืงืฉืจ ืืœื™ื” ืขื

Shell.2to3()

ืื ื–ื” ืœื ืขื•ื‘ื“, ื”ืžืชื•ืจื’ืžืŸ ืœื ื™ืืคืฉืจ ืœื–ื” ืœืขื‘ื•ืจ.
ื”ืคืชืจื•ืŸ ื”ื•ื ืœืงืจื•ื ืœืคืงื•ื“ื” ื‘ื“ืจืš ืกื™ื‘ื•ื‘ื™ืช:

Shell("2to3")  # ะฒะพะทะฒั€ะฐั‰ะฐะตั‚ ะพะฑัŠะตะบั‚ ะบะพะผะฐะฝะดั‹

ืจืื•ื™ ืœืฆื™ื™ืŸ ืฉื‘ืื•ืชื• ืื•ืคืŸ ื ื™ืชืŸ ืœื”ืจื™ืฅ ืคืงื•ื“ื•ืช ืชืงืคื•ืช ืžื ืงื•ื“ืช ืžื‘ื˜ื• ืฉืœ ื”ืžืชื•ืจื’ืžืŸ, ืžื” ืฉืžื•ืชื™ืจ ืืช ื”ืืคืฉืจื•ืช ืœื™ืฆื•ืจ ืกืงืจื™ืคื˜ื™ื ื’ืžื™ืฉื™ื ื›ืžื•

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

ืฉื™ื ื•ื™ื™ื ืžื™ื ื•ืจื™ื™ื

  • ื”ื•ื˜ืžืขื• ื”ืฉื™ื˜ื•ืช __repr__() ื•__str__() ืฉืœ ืื•ื‘ื™ื™ืงื˜ ื”ืžื—ืœืงื” Command, ืืฉืจ ืžื™ื™ืฆืจื•ืช ื›ืขืช ืขืจื›ื™ื ืื™ื ื˜ื•ืื™ื˜ื™ื‘ื™ื™ื (ืคืงื•ื“ื” ืขื ืคืจืžื˜ืจื™ื ื•ืคืœื˜ stdout ืฉืœื”, ื‘ื”ืชืืžื”).
  • ืชื™ืงื•ื ื™ ืงื•ื“ ืงืœื™ื.
  • ื”ื•ืกืคืช ื›ื™ืกื•ื™ ืžื‘ื—ืŸ, ื›ืžื• ื’ื ืืจื’ื•ืŸ ืžื—ื“ืฉ ืฉืœ ืงื™ื™ืžื™ื.
  • ื”ื•ืกืคืช ืžื—ืœืงื•ืช Subprocess ื•-Process, ืฉืžื˜ืจืชืŸ ืœื™ืฆื•ืจ ืจืžื” ื ื•ืกืคืช ืฉืœ ื”ืคืฉื˜ื” ื‘ืขื‘ื•ื“ื” ืขื ืžื•ื“ื•ืœ ืชืช-ื”ืชื”ืœื™ืš. ื“ืจื•ืฉ ื‘ืขื™ืงืจ ื›ื“ื™ ืœืžื ื•ืข ื›ืคื™ืœื•ืช ืงื•ื“ ื‘ืขื‘ื•ื“ื” ืขื Python 2/3, ืื‘ืœ ื™ื›ื•ืœ ืœืกืคืง ื’ื ื‘ื•ื ื•ืกื™ื ืื—ืจื™ื.

ืžื” ื—ื“ืฉ ื‘-smart-env?

ื‘ื ื™ื’ื•ื“ ืœ-python-shell, ื”ื™ื• ืคื—ื•ืช ืฉื™ื ื•ื™ื™ื ื‘ืกืคืจื™ื™ืช smart-env. ื”ืกื™ื‘ื” ืœื›ืš ืคืฉื•ื˜ื” - ื—ื•ืกืจ ื–ืžืŸ ืคื ื•ื™, ืฉื‘ืžื”ืœื›ื• ื”ื•ืขื‘ืจื• ื›ืžื” ืฉื™ืคื•ืจื™ื ืคื•ื˜ื ืฆื™ืืœื™ื™ื (ืœืžืฉืœ, ื”ืฉืœืžื” ืื•ื˜ื•ืžื˜ื™ืช ืฉืœ ืžืฉืชื ื™ ืกื‘ื™ื‘ื”) ืœืžื”ื“ื•ืจื” ื”ื‘ืื”.

ืœืžืขืฉื”, ื‘ื•ืฆืขื• ื”ืฉื™ื ื•ื™ื™ื ื”ื‘ืื™ื ื‘ืกืคืจื™ื™ื”:

  • ืชื™ืงื•ื ื™ ืงื•ื“ ืงืœื™ื.
  • ืืจื’ื•ืŸ ืžื—ื“ืฉ.
  • ืืจื’ื•ืŸ ืžื—ื“ืฉ ื•ืฉื›ืœื•ืœ ืžื‘ื—ื ื™ื ืงื™ื™ืžื™ื.

ืชื•ื›ื ื™ื•ืช ืœืžื”ื“ื•ืจื•ืช ื”ื‘ืื•ืช

ืกืคืจื™ื™ืช python-shell

  • ื”ื•ืกืคืช ืชืžื™ื›ื” ื‘ืงืจื™ืื•ืช ืคืงื•ื“ื•ืช ืฉืื™ื ืŸ ื—ื•ืกืžื•ืช (ืžืงื‘ื™ืœื•ืช ื‘ื™ืฆื•ืข).

ืกืคืจื™ื™ืช smart-env

  • ื™ื™ืฉื•ื ื”ืฉืœืžื” ืื•ื˜ื•ืžื˜ื™ืช ืฉืœ ืžืฉืชื ื™ ืกื‘ื™ื‘ื” ื‘ืžื—ืœืงื” ENV.
  • ืชืžื™ื›ื” ื‘ืื•ืคืจื˜ื•ืจ in ืœื‘ื“ื™ืงืช ืงื™ื•ืžื• ืฉืœ ืžืฉืชื ื” env.
  • ื”ื˜ืžืขืช ืชืžื™ื›ื” ื‘ืคื•ื ืงืฆื™ื•ืช str() ื•- repr() ืขื‘ื•ืจ ืžื—ืœืงืช ENV.

ืชืืจื™ื›ื™ ื”ืžื”ื“ื•ืจื•ืช ื”ื‘ืื•ืช ื™ืคื•ืจืกืžื• ืขื•ื“ ื‘ืขืจื•ืฆื™ ื”ืชืงืฉื•ืจืช ื”ื‘ืื™ื:

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”