Python๊ณผ Bash์˜ ์šฐ์ • ๋งŒ๋“ค๊ธฐ: python-shell ๋ฐ smart-env v ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถœ์‹œ. 1.0.1

๋ชจ๋‘์—๊ฒŒ ์ข‹์€ ๋‚ !

29 2์›” 2020 ๋…„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ณต์‹ ๋งˆ์ดํฌ๋กœ ๋ฆด๋ฆฌ์Šค๊ฐ€ ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์Šค๋งˆํŠธ ํ™˜๊ฒฝ ะธ ํŒŒ์ด์ฌ ์‰˜. ๋ชจ๋ฅด์‹œ๋Š” ๋ถ„๋“ค์€ ๋จผ์ € ์ฝ์–ด๋ณด์‹œ๊ธธ ์ถ”์ฒœ๋“œ๋ ค์š” ์ฒซ ๋ฒˆ์งธ ๊ฒŒ์‹œ๋ฌผ.

๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์—๋Š” ๋ช…๋ น ์™„์„ฑ, ๋ช…๋ น ์‹คํ–‰์„ ์œ„ํ•œ ํ™•์žฅ๋œ ๊ธฐ๋Šฅ, ์ผ๋ถ€ ๋ฆฌํŒฉํ„ฐ๋ง ๋ฐ ๋ฒ„๊ทธ ์ˆ˜์ •์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ณ ์–‘์ด๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Python-Shell์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋ฐ”๋กœ ๋””์ €ํŠธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ช…๋ น ์™„์„ฑ

๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ํŽธ์ง‘๊ธฐ/IDE/ํ„ฐ๋ฏธ๋„์—์„œ ๋ช…๋ น ์ด๋ฆ„์„ ๋ฌป๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ๋•Œ๋กœ๋Š” ํ˜ธ์ถœ ๋งค๊ฐœ๋ณ€์ˆ˜๊นŒ์ง€ ๋ฌป๋Š” ๊ฒƒ์ด ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ python-shell์€ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์ ์ฐจ ์ง„์ „์„ ๋ณด์ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ Shell ํด๋ž˜์Šค์˜ ํ•„๋“œ๊ฐ€ ์‚ฌ์‹ค์ƒ ํ•ด๋‹น ํ•„๋“œ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์—(์œ ๋น„์ฟผํ„ฐ์Šค __getattr__) ์ž๋™ ์™„์„ฑ๋„ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(๊ฐ๊ฐ __dir__ ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋กœ๋“œํ•˜์—ฌ). ์ž๋™ ์™„์„ฑ์€ ํ˜„์žฌ BPython ๋ฐ IPython ํ™˜๊ฒฝ์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  PyCharm๊ณผ ๊ฐ™์€ ์ข€ ๋” ์กด๊ฒฝ๋ฐ›๋Š” ์ œํ’ˆ๊ณผ์˜ ํ†ตํ•ฉ์„ ๋ณด๊ณ  ์‹ถ๊ณ , ์ด๋Ÿฌํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅ์„ฑ์ด ์—ฐ๊ตฌ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์†์„ฑ ์ถ”๊ฐ€

๋ฆด๋ฆฌ์Šค์˜ ์ผ๋ถ€๋กœ Shell ํด๋ž˜์Šค๋Š” ์ƒˆ๋กœ์šด last_command ์†์„ฑ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. XNUMX์ด ์•„๋‹Œ ๋ฐ˜ํ™˜ ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ๋ช…๋ น์— ์˜ํ•ด ShellException์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ Command ๊ฐœ์ฒด๊ฐ€ ๋ช…๋ น ๊ฐœ์ฒด์— ๋Œ€ํ•œ __call__() ํ˜ธ์ถœ์—์„œ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ํ•„์š”ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ด๊ฒƒ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค:

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

Command ๊ฐœ์ฒด์˜ ์†์„ฑ ๋ชฉ๋ก๋„ ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ช…๋ น ์ถœ๋ ฅ์„ ์˜ค๋ฅ˜ ์ŠคํŠธ๋ฆผ์— ๋ฐ˜ํ™˜ํ•˜๋Š” ์˜ค๋ฅ˜ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ž˜๋ชป๋œ Python ์ด๋ฆ„์œผ๋กœ ๋ช…๋ น ์‹คํ–‰

๊ฑฐ์˜ ๋ชจ๋“  ์‹œ์Šคํ…œ์—๋Š” ์ด๋ฆ„์ด Python์˜ ์‹๋ณ„์ž๋กœ ์ ํ•ฉํ•˜์ง€ ์•Š์€ ํ”„๋กœ๊ทธ๋žจ์ด ํ•˜๋‚˜ ์ด์ƒ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ์ž˜ ์•Œ๋ ค์ง„ 2to3 ์œ ํ‹ธ๋ฆฌํ‹ฐ). ๊ทธ๋…€์—๊ฒŒ ์ „ํ™”ํ•ด

Shell.2to3()

์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉด ํ†ต์—ญ์‚ฌ๊ฐ€ ํ†ต๊ณผ์‹œํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
ํ•ด๊ฒฐ์ฑ…์€ ๋กœํ„ฐ๋ฆฌ ๋ฐฉ์‹์œผ๋กœ ๋ช…๋ น์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ๊ด€์ ์—์„œ ์œ ํšจํ•œ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์œ ์—ฐํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ์žˆ๋‹ค๋Š” ์ ์€ ์ฃผ๋ชฉํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์‚ฌ์†Œํ•œ ๋ณ€ํ™”

  • Command ํด๋ž˜์Šค ๊ฐ์ฒด์˜ __repr__() ๋ฐ __str__() ๋ฉ”์„œ๋“œ๊ฐ€ ๊ตฌํ˜„๋˜์–ด ์ด์ œ ์ง๊ด€์ ์ธ ๊ฐ’(๊ฐ๊ฐ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ช…๋ น ๋ฐ ํ•ด๋‹น stdout ์ถœ๋ ฅ)์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์†Œํ•œ ์ฝ”๋“œ ์ˆ˜์ •.
  • ํ…Œ์ŠคํŠธ ์ ์šฉ ๋ฒ”์œ„๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ธฐ์กด ๋ฒ”์œ„๋ฅผ ์žฌ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • Subprocess ๋ฐ Process ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๋ชฉ์ ์€ subprocess ๋ชจ๋“ˆ๋กœ ์ž‘์—…ํ•  ๋•Œ ์ถ”๊ฐ€ ์ถ”์ƒํ™” ์ˆ˜์ค€์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Python 2/3์œผ๋กœ ์ž‘์—…ํ•  ๋•Œ ์ฝ”๋“œ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๋Š” ๋ฐ ์ฃผ๋กœ ํ•„์š”ํ•˜์ง€๋งŒ ์ž ์žฌ์ ์œผ๋กœ ๋‹ค๋ฅธ ๋ณด๋„ˆ์Šค๋„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์Šค๋งˆํŠธ ํ™˜๊ฒฝ์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

python-shell๊ณผ ๋‹ฌ๋ฆฌ smart-env ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ์—ฌ์œ  ์‹œ๊ฐ„์ด ๋ถ€์กฑํ•˜์—ฌ ์ผ๋ถ€ ์ž ์žฌ์ ์ธ ๊ฐœ์„  ์‚ฌํ•ญ(์˜ˆ: ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ž๋™ ์™„์„ฑ)์ด ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค๋กœ ์˜ฎ๊ฒจ์กŒ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ์‚ฌ์†Œํ•œ ์ฝ”๋“œ ์ˆ˜์ •.
  • ๋ฆฌํŒฉํ† ๋ง.
  • ๊ธฐ์กด ํ…Œ์ŠคํŠธ์˜ ์žฌ๊ตฌ์„ฑ ๋ฐ ๊ฐœ์„ .

๋‹ค์Œ ๋ฆด๋ฆฌ์Šค ๊ณ„ํš

ํŒŒ์ด์ฌ ์‰˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • ๋น„์ฐจ๋‹จ ๋ช…๋ น ํ˜ธ์ถœ์— ๋Œ€ํ•œ ์ง€์› ์ถ”๊ฐ€(์‹คํ–‰ ๋ณ‘๋ ฌํ™”)

์Šค๋งˆํŠธ ํ™˜๊ฒฝ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • ENV ํด๋ž˜์Šค์—์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ž๋™ ์™„์„ฑ ๊ตฌํ˜„.
  • env ๋ณ€์ˆ˜์˜ ์กด์žฌ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด in ์—ฐ์‚ฐ์ž๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ENV ํด๋ž˜์Šค์— ๋Œ€ํ•œ str() ๋ฐ repr() ํ•จ์ˆ˜ ์ง€์› ๊ตฌํ˜„.

๋‹ค์Œ ๋ฆด๋ฆฌ์Šค ๋‚ ์งœ๋Š” ๋‹ค์Œ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ์ฑ„๋„์„ ํ†ตํ•ด ์ถ”๊ฐ€๋กœ ๋ฐœํ‘œ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€