Python เช…เชจเซ‡ Bash เชฎเชฟเชคเซเชฐเชคเชพ เชฌเชจเชพเชตเชตเซ€: python-shell เช…เชจเซ‡ smart-env v เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เช“เชจเซเช‚ เชชเซเชฐเช•เชพเชถเชจ. 1.0.1

เชฆเชฐเซ‡เช•เชจเซ‡ เชถเซเชญ เชฆเชฟเชตเชธ!

29 เชซเซ‡เชฌเซเชฐเซเช†เชฐเซ€ 2020 เชตเชฐเซเชท เชชเซเชธเซเชคเช•เชพเชฒเชฏเซ‹เชจเซเช‚ เชธเชคเซเชคเชพเชตเชพเชฐ เชธเซ‚เช•เซเชทเซเชฎ เชชเซเชฐเช•เชพเชถเชจ เชฅเชฏเซเช‚ smart-env ะธ เช…เชœเช—เชฐ-เชถเซ‡เชฒ. เชœเซ‡เช“ เชœเชพเชฃเชคเชพ เชจเชฅเซ€ เชคเซ‡เชฎเชจเชพ เชฎเชพเชŸเซ‡, เชนเซเช‚ เชธเซ‚เชšเชจ เช•เชฐเซเช‚ เช›เซเช‚ เช•เซ‡ เชคเชฎเซ‡ เชคเซ‡เชจเซ‡ เชชเชนเซ‡เชฒเชพ เชตเชพเช‚เชšเซ‹ เชชเซเชฐเชฅเชฎ เชชเซ‹เชธเซเชŸ.

เชŸเซ‚เช‚เช•เชฎเชพเช‚, เชซเซ‡เชฐเชซเชพเชฐเซ‹เชฎเชพเช‚ เช†เชฆเซ‡เชถ เชชเซ‚เชฐเซเชฃเชคเชพ, เช†เชฆเซ‡เชถเซ‹ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชตเชฟเชธเซเชคเซƒเชค เช•เซเชทเชฎเชคเชพเช“, เช•เซ‡เชŸเชฒเชพเช• เชฐเชฟเชซเซ‡เช•เซเชŸเชฐเชฟเช‚เช— เช…เชจเซ‡ เชฌเช— เชซเชฟเช•เซเชธเชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡.

เชตเชฟเช—เชคเซ‹ เชฎเชพเชŸเซ‡, เช•เซƒเชชเชพ เช•เชฐเซ€เชจเซ‡ เชฌเชฟเชฒเชพเชกเซ€ เชœเซเช“.

เชชเชพเชฏเชฅเซ‹เชจ-เชถเซ‡เชฒเชฎเชพเช‚ เชจเชตเซเช‚ เชถเซเช‚ เช›เซ‡?

เชนเซเช‚ เชคเชฐเชค เชœ เชกเซ‡เชเชฐเซเชŸ เชธเชพเชฅเซ‡ เชถเชฐเซ‚ เช•เชฐเซ€เชถ.

เช†เชฆเซ‡เชถ เชชเซ‚เชฐเซเชฃเชคเชพ

เชธเช‚เชฎเชค เชฅเชพเช“ - เชœเซเชฏเชพเชฐเซ‡ เชเชกเชฟเชŸเชฐ/IDE/เชŸเชฐเซเชฎเชฟเชจเชฒ เชคเชฎเชจเซ‡ เช†เชฆเซ‡เชถเชจเชพ เชจเชพเชฎ เชฎเชพเชŸเซ‡ เช…เชจเซ‡ เช•เซเชฏเชพเชฐเซ‡เช• เช•เซ‰เชฒ เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐเซเชธ เชฎเชพเชŸเซ‡ เชชเซ‚เช›เซ‡ เชคเซเชฏเชพเชฐเซ‡ เชคเซ‡ เช…เชจเซเช•เซ‚เชณ เช›เซ‡? เชคเซ‡เชฅเซ€ เชชเชพเชฏเชฅเซ‹เชจ-เชถเซ‡เชฒ เชงเซ€เชฎเซ‡ เชงเซ€เชฎเซ‡ เชธเชฎเชพเชจ เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชตเชพเชฎเชพเช‚ เชชเซเชฐเช—เชคเชฟ เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡. เชนเซ‚เชก เชนเซ‡เช เชณเชจเชพ เชถเซ‡เชฒ เชตเชฐเซเช—เชจเชพ เช•เซเชทเซ‡เชคเซเชฐเซ‹ เชคเซ‡เชจเชพ เช•เซเชทเซ‡เชคเซเชฐเซ‹ (เชธเชฐเซเชตเชตเซเชฏเชพเชชเซ€ __getattr__) เชจเชฅเซ€, เชนเช•เซ€เช•เชคเชฎเชพเช‚ เชนเซ‹เชตเชพเชจเซ‡ เช•เชพเชฐเชฃเซ‡, เชธเซเชตเชคเชƒเชชเซ‚เชฐเซเชฃเชคเชพ เชชเชฃ เชถเชฐเซ‚เช†เชคเชฅเซ€ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€ (เช…เชจเซเช•เซเชฐเชฎเซ‡ __dir__ เชชเชฆเซเชงเชคเชฟเชจเซ‡ เช“เชตเชฐเชฒเซ‹เชก เช•เชฐเซ€เชจเซ‡). เชธเซเชตเชคเชƒเชชเซ‚เชฐเซเชฃเชคเชพ เชนเชพเชฒเชฎเชพเช‚ BPython เช…เชจเซ‡ IPython เชตเชพเชคเชพเชตเชฐเชฃเชฎเชพเช‚ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡. เช…เชฒเชฌเชคเซเชค, เชนเซเช‚ PyCharm เชœเซ‡เชตเชพ เชตเชงเซ เช†เชฆเชฐเชฃเซ€เชฏ เช‰เชคเซเชชเชพเชฆเชจเซ‹ เชธเชพเชฅเซ‡ เชเช•เซ€เช•เชฐเชฃ เชœเซ‹เชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚ เช…เชจเซ‡ เช† เชฆเชฟเชถเชพเชฎเชพเช‚ เช…เชฎเชฒเซ€เช•เชฐเชฃเชจเซ€ เชถเช•เซเชฏเชคเชพเช“เชจเซ‹ เช…เชญเซเชฏเชพเชธ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชฐเชนเซเชฏเซ‹ เช›เซ‡.

เช—เซเชฃเชงเชฐเซเชฎเซ‹ เช‰เชฎเซ‡เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

เชชเซเชฐเช•เชพเชถเชจเชจเชพ เชญเชพเช—เชฐเซ‚เชชเซ‡, เชถเซ‡เชฒ เชตเชฐเซเช—เชจเซ‡ เชจเชตเซ€ เชฒเชพเชธเซเชŸ_เช•เชฎเชพเชจเซเชก เชชเซเชฐเซ‹เชชเชฐเซเชŸเซ€ เชชเซเชฐเชพเชชเซเชค เชฅเชˆ เช›เซ‡. เชคเซ‡เชจเซ€ เชœเชฐเซ‚เชฐเชฟเชฏเชพเชค เชŠเชญเซ€ เชฅเชˆ เช•เชพเชฐเชฃ เช•เซ‡ เชœเซเชฏเชพเชฐเซ‡ ShellException เชจเซ‹เชจ-เชเซ€เชฐเซ‹ เชฐเซ€เชŸเชฐเซเชจ เช•เซ‹เชก เชธเชพเชฅเซ‡ เช†เชฆเซ‡เชถ เชฆเซเชตเชพเชฐเชพ เชซเซ‡เช‚เช•เชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹, เชคเซเชฏเชพเชฐเซ‡ เช•เชฎเชพเชจเซเชก เช‘เชฌเซเชœเซ‡เช•เซเชŸ __call__() เช•เซ‰เชฒเชฎเชพเช‚เชฅเซ€ เช•เชฎเชพเชจเซเชก เช‘เชฌเซเชœเซ‡เช•เซเชŸ เชชเชฐ เชชเชพเช›เซ‹ เชซเชฐเซเชฏเซ‹ เชจ เชนเชคเซ‹. เชนเชตเซ‡ เช† เช•เชฐเชตเชพเชจเซ€ เชคเช• เช›เซ‡:

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

เช•เชฎเชพเชจเซเชก เช‘เชฌเซเชœเซ‡เช•เซเชŸเชจเชพ เช—เซเชฃเชงเชฐเซเชฎเซ‹เชจเซ€ เชธเซ‚เชšเชฟ เชชเชฃ เชตเชฟเชธเซเชคเซƒเชค เชฅเชˆ เช›เซ‡. เชเชฐเชฐ เชซเซ€เชฒเซเชก เช‰เชฎเซ‡เชฐเซเชฏเซเช‚ เชœเซ‡ เชเชฐเชฐ เชธเซเชŸเซเชฐเซ€เชฎเชฎเชพเช‚ เช•เชฎเชพเชจเซเชก เช†เช‰เชŸเชชเซเชŸ เชชเชฐเชค เช•เชฐเซ‡ เช›เซ‡.

เช…เชฎเชพเชจเซเชฏ Python เชจเชพเชฎเซ‹ เชธเชพเชฅเซ‡ เช†เชฆเซ‡เชถเซ‹ เชšเชฒเชพเชตเซ€ เชฐเชนเซเชฏเชพ เช›เซ‡

เชฒเช—เชญเช— เชฆเชฐเซ‡เช• เชธเชฟเชธเซเชŸเชฎเชฎเชพเช‚ เช“เช›เชพเชฎเชพเช‚ เช“เช›เซ‹ เชเช• เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เชนเซ‹เชฏ เช›เซ‡ เชœเซ‡เชจเซเช‚ เชจเชพเชฎ เชชเชพเชฏเชฅเซ‹เชจเชฎเชพเช‚ เช“เชณเช–เช•เชฐเซเชคเชพ เชคเชฐเซ€เช•เซ‡ เชฏเซ‹เช—เซเชฏ เชจเชฅเซ€ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชœเชพเชฃเซ€เชคเซ€ 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 เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เชฎเชพเช‚ เช“เช›เชพ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชฅเชฏเชพ เช›เซ‡. เช†เชจเซเช‚ เช•เชพเชฐเชฃ เชธเชฐเชณ เช›เซ‡ - เช–เชพเชฒเซ€ เชธเชฎเชฏเชจเซ‹ เช…เชญเชพเชต, เชœเซ‡ เชฆเชฐเชฎเชฟเชฏเชพเชจ เช•เซ‡เชŸเชฒเชพเช• เชธเช‚เชญเชตเชฟเชค เชธเซเชงเชพเชฐเชพเช“ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชšเชฒเซ‹เชจเซ€ เชธเซเชตเชคเชƒเชชเซ‚เชฐเซเชฃเชคเชพ) เช†เช—เชพเชฎเซ€ เชชเซเชฐเช•เชพเชถเชจเชฎเชพเช‚ เช–เชธเซ‡เชกเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เชนเชคเชพ.

เชนเช•เซ€เช•เชคเชฎเชพเช‚, เชชเซเชธเซเชคเช•เชพเชฒเชฏเชฎเชพเช‚ เชจเซ€เชšเซ‡เชจเชพ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เช›เซ‡:

  • เชจเชพเชจเชพ เช•เซ‹เชก เชธเซเชงเชพเชฐเชพเช“.
  • เชฐเชฟเชซเซ…เช•เซเชŸเชฐเชฟเช‚เช—.
  • เชนเชพเชฒเชจเชพ เชชเชฐเซ€เช•เซเชทเชฃเซ‹เชจเซเช‚ เชชเซเชจเชฐเซเช—เช เชจ เช…เชจเซ‡ เชถเซเชฆเซเชงเชฟเช•เชฐเชฃ.

เช†เช—เชพเชฎเซ€ เชชเซเชฐเช•เชพเชถเชจเซ‹ เชฎเชพเชŸเซ‡ เชฏเซ‹เชœเชจเชพเช“

เชชเชพเชฏเชฅเซ‹เชจ-เชถเซ‡เชฒ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€

  • เชจเซ‹เชจ-เชฌเซเชฒเซ‹เช•เซ€เช‚เช— เช•เชฎเชพเชจเซเชก เช•เซ‹เชฒเซเชธ เชฎเชพเชŸเซ‡ เชธเชฎเชฐเซเชฅเชจ เช‰เชฎเซ‡เชฐเชตเซเช‚ (เชเช•เซเชเชฟเช•เซเชฏเซเชถเชจเชจเซ€ เชธเชฎเชพเช‚เชคเชฐเชคเชพ).

เชธเซเชฎเชพเชฐเซเชŸ-env เชชเซเชธเซเชคเช•เชพเชฒเชฏ

  • ENV เชตเชฐเซเช—เชฎเชพเช‚ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชšเชฒเซ‹เชจเซ€ เชธเซเชตเชคเชƒเชชเซ‚เชฐเซเชฃเชคเชพเชจเซเช‚ เช…เชฎเชฒเซ€เช•เชฐเชฃ.
  • env เชตเซ‡เชฐเซ€เชเชฌเชฒเชจเซเช‚ เช…เชธเซเชคเชฟเชคเซเชต เชšเช•เชพเชธเชตเชพ เชฎเชพเชŸเซ‡ in operator เชฎเชพเชŸเซ‡ เช†เชงเชพเชฐ.
  • ENV เชตเชฐเซเช— เชฎเชพเชŸเซ‡ str() เช…เชจเซ‡ repr() เชซเช‚เช•เซเชถเชจ เชฎเชพเชŸเซ‡ เชธเชชเซ‹เชฐเซเชŸเชจเซเช‚ เช…เชฎเชฒเซ€เช•เชฐเชฃ.

เช†เช—เชพเชฎเซ€ เชชเซเชฐเช•เชพเชถเชจเซ‹เชจเซ€ เชคเชพเชฐเซ€เช–เซ‹ เชจเซ€เชšเซ‡เชจเซ€ เชธเช‚เชšเชพเชฐ เชšเซ‡เชจเชฒเซ‹เชฎเชพเช‚ เชตเชงเซ เชœเชพเชนเซ‡เชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡:

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹