๋ชจ๋์๊ฒ ์ข์ ๋ !
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