ํ์ด์ฌ 7.0.1์ ์คํํ๊ณ ์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ด ์ ์๋ํ๋ ๊ฒ ๊ฐ์ง๋ง ์ฒซ ๋ฒ์งธ ๊ฐ์ ธ ์ค๊ธฐ ํ์๋ ๊ณ์ ์ด์ํ ๊ธฐํธ๊ฐ ๋ํ๋ฉ๋๋ค (์ฒจ๋ถ ๋ ์คํฌ๋ฆฐ ์ท ์ฐธ์กฐ). ๋ค์ Enter ํค๋ฅผ ๋๋ฅด๋ฉด ๊ธฐํธ๊ฐ ์ฌ๋ผ์ง๊ณ ๋ค์ ๋ํ๋์ง ์์ต๋๋ค. Mac์ iterm2 ํฐ๋ฏธ๋์์ ํผ์ฌ ์์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
[์ต์ ์ ๋ณด]
prompt_toolkit์ 2.0.6์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค.
ํ ๋๋ ์ด๊ฒ์ ๋ณด์์ง๋ง ^[[43;1R
๋ฅผ ์ฌ์ฉํ์ง๋ง ํฐ๋ฏธ๋ ์๋ฎฌ๋ ์ดํฐ์ ๋ง์คํฐ์ ์๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค. ์ด๊ฒ์ด ์ด๋์์ ์๋์ง ํ์คํ์ง ์์ต๋๋ค.
๋๋ ์ต์ https://github.com/jonathanslenders/pymux (์ถ์๋์ง ์์, prompt-toolkit 2 ์ฌ์ฉ)์์ ๋น์ทํ ๊ฒ์ ๋ณด์์ต๋๋ค. ์ด์ฉ๋ฉด @jonathanslenders ๊ฐ ์ด๋ค ์์ด๋์ด๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๊น?
๋๋ ๋๊ฐ์ด ์ป๋๋ค :
$ ipython
Python 3.6.5 (default, Mar 30 2018, 06:41:53)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.0.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import os
^[[19;1RIn [2]:
๊ทธ๋ฐ ๋ค์ ํญ ์๋ฃ๋ฅผ ์๋ํ๋ฉด :
In [2]: os.p
os.pardir os.pathconf os.pathsep os.popen os.putenv
os.path os.pathconf_names os.pipe os.pread os.pwrite
^[[19;1RIn [2]: os.p
์ด๋ก ์ธํด ํญ ์์ฑ์ ๊ฑฐ์ ์ฌ์ฉํ ์ ์๊ฒ๋ฉ๋๋ค.
https://github.com/jonathanslenders/python-prompt-toolkit/commit/e226d640177aa1d2cf293e4de382f171586173a2 ์ปค๋ฐ์ผ๋ก์ด ๋ฌธ์ ๋ฅผ
prompt_toolkit ๋ง์คํฐ์ ๋ณํฉ๋์์ง๋ง์ด๋ฅผ ํฌํจํ๋ ์๋ก์ด prompt_toolkit 2.0์ ์ถ์ํ๋ ค๊ณ ํฉ๋๋ค.
๋ง์คํฐ์์ prompt-toolkit
๋ฅผ ์ค์นํ๋๋ฐ ๋ฌธ์ ๊ฐ ์ฌ์ ํ์๋ ๊ฒ ๊ฐ์ง๋ง ipython ์ธก์์ ๋ค๋ฅธ ์์
์ ์ํํด์ผํ๋์ง ํ์คํ์ง ์์ต๋๋ค.
์๋์, IPython์ด ์๋๋ผ๊ณ ํ์ ํฉ๋๋ค. iterm2๋ก ์ฌํ ํด ๋ณผ๊ฒ์
๋๋ ์ฌ๊ธฐ์ ๋ณต์ก์ฑ์ ์ดํดํ๊ณ ์์ง๋ ์์ง๋ง ๋จ์ง ์ ๋ณด๋ฅผ ์ํด ์ด๊ฒ์ IPython 7.0 ๋ฐ 7.1์์ ๋ฐ์ํ๋ฉฐ 6.0 ๋๋ 6.5์์๋ ๋ฐ์ํ์ง ์์ผ๋ฉฐ ๋์ผํ virtualenv์์ ํ ์คํธ๋ฉ๋๋ค.
๋ณธ ์ ์ด์๋ ํฐ๋ฏธ๋์ ๋ชจ๋ ๊ฒ์ ํ ์ ์์ต๋๊น?
iTerm2 โ 3.2.1beta6 โ osx์์ ์ฌ์์ฐ ํ ์ ์์ต๋๋ค. alacritty v0.2.0-35-ga53cabf osx,ํ์ง๋ง ๋ฒ ์ด macos terminal.app์๋ ์์ (sierra 10.12.6)
๊ด๊ณ ๋ ๋จ๋ง๊ธฐ ๊ธฐ๋ฅ๊ณผ ์ค์ ๋ก ํ ์์๋ ๊ธฐ๋ฅ์ด ์ผ์นํ์ง ์์ ์ ์์ต๋๊น?
๋ํ ipython --colors=nocolor
์ฌํ ํ ์ ์์ต๋๋ค.
High Sierra 10.13.6์ ๋งจ์ Terminal.app. nocolor
์ (๋) ์ ๋ฅผ ์ํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ์์ต๋๋ค.
๋ํ
ipython --colors=nocolor
์ฌํ ํ ์ ์์ต๋๋ค.
์คํฌ๋์น, ๊ทธ๊ฒ์ ๋ฌด์์๋ก ๋ณด์ด์ง๋ง ์ค์ ๋ก nocolor๋ ๊ทธ๊ฒ์ ๊ณ ์น์ง ๋ชปํ์ต๋๋ค.
์ด patch_stdout
์ปจํ
์คํธ ๊ด๋ฆฌ์๋ฅผ ์ ๊ฑฐํ์ฌ ์๋ํด ๋ณผ ์ ์์ต๋๊น?
๋ด๊ฐ ๊ทธ๊ฒ์ ์ ๊ฑฐํ๋ฉด ๋์๊ฒ _seem_ ๊ด์ฐฎ๊ณ , ๋ด๊ฐ ์ฌ๋ถ์ stdout์ ํ๋ฌ์ํ๋ฉด ๋ ๋ฒ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค ..
์ปจํ ์คํธ ๊ด๋ฆฌ์๋ฅผ ์ ๊ฑฐํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ด๊ฒ์ macOS Terminal.app๊ณผ iTerm2์์ ๋์๊ฒ ๋ฐ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์บ๋ฆญํฐ๋ iTerm2 3.2.1beta์์ ๋งค์ฐ ์ผ๊ด๋๊ฒ ๋ํ๋ฌ์ต๋๋ค. ์ค๋ ์์นจ์ 3.2.2beta1๋ก ์ ๊ทธ๋ ์ด๋ํ๋๋ฐ ์ด์ ์บ๋ฆญํฐ๊ฐ ๋ํ๋๊ณ ์ฆ์ ์ฌ๋ผ์ง๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ฉฐ ์ผ๋ฐ iPython ํ๋กฌํํธ๋ก ๋์ฒด๋์์ต๋๋ค. ํ์ง๋ง ์ ์ด๋ ํ ๋ฒ์ ์บ๋ฆญํฐ๊ฐ ๋์ง๊ธฐ๊ณ ์์๋๋ฐ ๊ทธ ์ฐจ์ด๊ฐ ๋ฌด์์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๋ค, ์ ๋ ๊ณ ์ณ์ค๋๋ค. ๊ทธ ํจ๊ณผ๋ ํญ์ ์ผ๊ด๋์์ต๋๋ค.
@jonathanslenders ํจ์น stdout์ ๊ฒฝ์ ์กฐ๊ฑด์ด ์๊ณ stdout / err์ด ๋ณต์๋๊ณ ํ๋ฌ์๊ฐ ๋ฐ์ํ๊ธฐ ์ ์ ์ฐ๊ธฐ ์์๋ ์ ์์ต๋๊น?
patch_stdout์ raw
๋งค๊ฐ ๋ณ์๋ ptk ์ฝ๋์์๋ ์๋ฌด๋ฐ๋ ๊ฐ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฐ๋ผ์ ์ด๊ฒ์ ๊ฐ์ง ์ด์ ๊ฐ ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์์ ์ธ์ํ๋ฉด ๋ ๋๋ง์ด ์๋ง์ด ๋ ์ ์์ง๋ง (๋์๊ฒ๋) ์บก์ฒ ๋ stderr / out์ ํ๋ฌ์ํ๊ณ ์ด๊ธฐ ๊ฐ์ผ๋ก ๋ณต์ํ๋ ์ฌ์ด์ ๊ฒฝ์ ์กฐ๊ฑด์ ๋๋ค.
๋ฒ๊ทธ๋ฅผ ํ์งํํ๋์ง ๋๋ ์์ง ์คํ ์ค์ธ์ง ํ์คํ์ง ์์ง๋ง ์ ๋ณด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
^[[41;1R
(๊ฐ์ ธ ์ค๊ธฐ, ํํ์, ๋น ์ค ํฌํจ)Python 3.7.0 (default, Sep 18 2018, 18:47:22)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.0.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]:
^[[41;1RIn [1]:
๋๋ ๋ํ์ด (macOS 10.11.6, iTerm 3.2.0beta5)๋ฅผ 100 %๋ ์๋์ง๋ง 43;1R
์ํ์ค๋ก ๋งค์ฐ ์์ฃผ ์ป์ต๋๋ค.
Python 3.7.0 (default, Jun 29 2018, 20:13:53)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.0.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import sqlalchemy
^[[43;1RIn [2]:
๊ทธ๋, ์ด๊ฑด ์ ๋ง ๋๋ฅผ ์ฃฝ์ด๊ณ ์์ด. ๋ค์ด ๊ทธ๋ ์ด๋ํ์ง๋ง Jupyter ๋ ธํธ๋ถ์ด ์์๋ฉ๋๋ค. ์ ์๊ฒ์์ด์ ํญ ์์ฑ์์ด ๋ฌธ์๊ฐ ๋งค์ฐ ์์ฃผ ๋ํ๋๊ธฐ ๋๋ฌธ์ ๋ค์ ์์ ํ ๊นจ์ก์ต๋๋ค.
์ฌํ๊ฒ๋ readline์ ํ์ฌ ์ต์ ์ด ์๋๋๋ค : https://github.com/ipython/rlipython/issues/21
prompt_toolkit
(๋ฒ์ 2.0.5)์ ํ์ฌ ๋ง์คํฐ๋ฅผ ์คํํ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ต๋๋ค.
์ฌํ ํ ์ ์์ต๋๋ค.
iTerm2 ๋น๋ 3.2.3 (์ต์ ๋ฒ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค), IPython 7.0.1, Python 3.6.1.
์ฐ๋ถํฌ์์ Python 3.6.3์ ๋ฒ๊ทธ๊ฐ ์์๊ณ Python 3.7์์๋ ์ฌ๋ผ์ก์ง ๋ง ๋ฌธ์๊ฐ ์ธ์ ๋ ํ ๋น ๋ฅด๊ฒ ์ ๊ฑฐ๋๋ ๊ฒ๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ๊ฒฐํจ์ ๋ณผ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์ ์์ ์ฌํญ์ด ์์ต๋๋ค : https://github.com/jonathanslenders/python-prompt-toolkit/commit/09de545476be985b95ae2690ef8393efdd65b7e5
์ค์ ๋ก์ด ์ปค๋ฐ์์ ๋ณผ ์์๋ ๊ฒ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์์๋ ๋ ๊ฐ์ง ๊ฐ๋ณ ์์ ์ฌํญ์ ๋๋ค.
์ด๋ค ์ด์ ๋ก ๋น ๋ฌธ์์ด์ด ์บก์ฒ๋์ด ์ฒซ ๋ฒ์งธ ์ ๋ ฅ์ ๋ฐ๊ธฐ ์ง์ ์ stdout์ ๊ธฐ๋ก๋ฉ๋๋ค. ์ด๊ฒ์ patch_stdout ์ฝ๋๋ฅผ ํธ๋ฆฌ๊ฑฐํ์ต๋๋ค. ์ฌ์ค, ๋น ๋ฌธ์์ด์ ์ธ์ํ๊ธฐ ์ํด ํ๋กฌํํธ๋ฅผ ์ง์ฐ๊ณ ๋ค์ ๊ทธ๋ฆด ํ์๊ฐ ์์์ต๋๋ค. (์ ์ด๋ฐ ์ผ์ด ์ค์ ๋ก ๋ฐ์ํ๋์ง ํ์ธํด์ผํฉ๋๋ค.)
์ค์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์บก์ฒ ๋ ์ฝํ ์ธ ๋ฅผ ๋ ๋๋งํ๊ธฐ ์ ์ CPR ์๋ต์ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ ๋๋ค. CPR์ ๋น๋๊ธฐ์์ผ๋ก ์๋ํฉ๋๋ค. stdout์ ๋ฌด์ธ๊ฐ๋ฅผ ์จ์ ์ปค์ ์์น๋ฅผ ์์ฒญํ๊ณ stdin์ ํฐ๋ฏธ๋์์ ์๋ต์๋ฐ์ต๋๋ค. ํญ์ ์ฝ๊ฐ์ ์ง์ฐ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํฐ๋ฏธ๋์ RAW ๋ชจ๋๋ก ์ ์งํ๊ณ ์ด ์๋ต์ด ๋์ฐฉํ ๋๊น์ง์ด ์ ๋ ฅ์ ์ฝ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๋ ๊ฒํ์ง ์์๊ณ ์ปค์ ์์น๋ก ํฐ๋ฏธ๋ ์์ฒด์ ์๋ต์ ๋ ๋๋งํ์ต๋๋ค.
ํ์ด๋ฐ์ ํฐ๋ฏธ๋๋ง๋ค ์กฐ๊ธ์ฉ ๋ค๋ฅด ๊ฒ ์ง๋ง, ๊ทธ๋ ๊ฒ๋์ด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ชจ๋ ์ต์ prompt_toolkit ์ปค๋ฐ์ ์ฌ์ฉํด ๋ณผ ์ ์์ต๋๊น? ์๋ํ๋ฉด ์ ๋ฆด๋ฆฌ์ค๋ฅผ ํธ์ํ๊ฒ ์ต๋๋ค.
๊ทธ๊ฒ์ ๋ด ์ชฝ์ ๋ฒ๊ทธ๋ฅผ ์์ ํฉ๋๋ค. ๊ฐ์ฌํฉ๋๋ค @jonathanslenders !
์, ๋ง์ ๊ฐ์ฌํฉ๋๋ค. ์ต์ ๋ง์คํฐ๊ฐ ๋๋ฅผ ์ํด ์์ ํ์ต๋๋ค.
์ด ํจ์น๋ ๋ด๊ฐ ๊ฐ์ง๊ณ ์๋ ์ผ๋ถ [[39;1R
๋ฌธ์๋ฅผ ์์ ํฉ๋๋ค. ๊ฐ์ฌ!
ํธ์ง : ์คํฌ๋์น. ์๋ชป๋ ๋ฒ์ ์ ํ ์คํธํ๊ณ ์์์ต๋๋ค. ์, ์ด๊ฒ์ ๋์๊ฒ๋ ํด๊ฒฐ๋๋ ๊ฒ ๊ฐ์ต๋๋ค.
์๋, ์ด๊ฒ์ ๋๋ฅผ ์ํด ๊ทธ๊ฒ์ ๊ณ ์น์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋์ ๋๋ ๋ค๋ฅธ ์บ๋ฆญํฐ๋ฅผ ์ป์ต๋๋ค
AlbireoProหalbireo: Downloads ยป ipython (3.7.0 2.7.15)
In [1]: from can.interfaces.slcan import slcanBus
^[[21;1RIn [2]:
๋ชจ๋ ์ต์ prompt_toolkit ์ปค๋ฐ์ ์ฌ์ฉํด ๋ณผ ์ ์์ต๋๊น? ์๋ํ๋ฉด ์ ๋ฆด๋ฆฌ์ค๋ฅผ ํธ์ํ๊ฒ ์ต๋๋ค.
๋๋ฅผ ์ํด ์๋ํฉ๋๋ค. ๋น์ ์ ๋ํ AFAICT์ ์์ ์ฒ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํ์ต๋๋ค. ์ฐ๋ฆฌ๋ IPython์ ์ผ๋ถ ์์น์์ ansi ์ฝ๋์ ๋ํ ansi ๋งคํ์ ์์งํ์ง ์๊ณ ์์กดํ์ต๋๋ค.์ด ๋ฌธ์ ๋ ์์ ํ๊ฒ ์ต๋๋ค. ๊ฐ์ฌ !
@Carreau : ๋ฐฉ๊ธ prompt_toolkit 2.0.6์ ํธ์ํ์ต๋๋ค.
IPython์ ํน์ RRGGBB ์ํ์ค๊ฐ โโ256 ์ ๋ชจ๋์์๋ ํน์ ANSI ์์์ผ๋ก ๋งคํ ๋ ๊ฒ์ผ๋ก ์์ํฉ๋๊น?
๊ทธ๋ฐ๋ฐ @Carreau , ์ด์ prompt_toolkit์ ํ ๊ฐ์ง ๊ธฐ๋ฅ์ ์์์ ๋ฐ๊ธฐ๋ฅผ ๋์ด๊ฑฐ๋ ๋ฎ์ถ๋ ๊ธฐ๋ฅ์ ๋๋ค. ๋ฐ๋ผ์ ๋ฐฐ๊ฒฝ์ด ๋ฐ๊ฑฐ๋ ์ด๋์ด ๋จ๋ง๊ธฐ์ ์ฝ๊ฒ ์กฐ์ ํ ์ ์์ต๋๋ค. ํ ์คํธ๋ฅผ ์ํด ptpython ๋ฉ๋ด์ (๋ํ์์ผ๋ก) ์ถ๊ฐํ์ผ๋ฉฐ ๊ฝค ์ ์๋ํฉ๋๋ค.
๋ฐฐ๊ณ ์๋ค
"์์"์ด๋ผ๊ณ ๋งํ์ง๋ ์๊ฒ ์ง ๋ง ํ
๋ง์๋ #ansixxx
์ #00ff00
๊ฐ ์์ฌ์ ์ ์ด์ธ๋ฆฌ๋ ๊ฒ ๊ฐ์ต๋๋ค. 2.0.6์ ์ฌ์ฉํ๋ฉด ์ฐจ์ด์ ์ด ์ฝ๊ฐ ๋ ๊ฐํฉ๋๋ค.
#ansi
๋๋ #hex
์ฌ์ฉ ์ฌ๋ถ์ ๋ํด ๋ ๋ง์ ์ผ๊ด์ฑ์ด ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด๋ ์์ ์์ ๋ฐ๊ธฐ ์ต์ ์ ์ดํด ๋ณด๊ฒ ์ต๋๋ค. ์ ๋ ๋ช ์ฃผ ์ ์ ์๋ก์ด ์ง์ฑ ์ ์์ํ์ผ๋ฉฐ IPython / jupyter ์์ฒด๋ฅผ ๊ฐ๋ฐํ๋ ๋ฐ ์ฝ๊ฐ์ ์๊ฐ์ด ์์ต๋๋ค.
ํฅ๋ฏธ๋กญ์ง ๋ง ๋ง์ด๋ฉ๋๋ค. ์์์ด # 00ff00์ผ๋ก ์ ์๋๋ฉด 256 ์์ ํ๋ ํธ์์ ๊ฐ์ฅ ๊ฐ๊น์ด ์์์ ๋ณด์ง๋ง 16 ansi ์์์ ์ ์ธํฉ๋๋ค. ์ฆ, ๋๋จธ์ง 240 ์ ์ค์์ ๊ฐ์ฅ ๊ฐ๊น์ด ์์์ ์ฌ์ฉํฉ๋๋ค.
๊ทธ ์ด์ ๋ ์์ฆ ์ฌ๋๋ค์ ์ข ์ข ANSI ์์์ ๋ํด ์ ์ ๋ ์ฌ์ฉ์ ์ง์ ์ ๊ตฌ์ฑํ๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง ๋๋จธ์ง 240 ์์ ๋ํด์๋ ์ ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์ ์ํฉ์ ๋ฐ๋ผ ์ฝ๊ฐ ๋ค๋ฅผ ์ ์์ง๋ง ์ค์ ๋ก ๋ค๋ฅธ ์ฌ๋๋ค์ ์ค์ ์์์ ํจ์ฌ ๋ ๊ฐ๊น์ต๋๋ค.
๋ค์์ ๊ธฐ๋ณธ ANSI ์์์ด ๋ค๋ฅธ ํฐ๋ฏธ๋์์ ๋ ๋๋ง๋๋ ๋ฐฉ๋ฒ์ ์์
๋๋ค.
https://en.wikipedia.org/wiki/ANSI_escape_code#Colors
๊ณ ์ ์ ์คํธ๋ฆผ์ผ๋ก ํ์