Ipython: ์ฒ˜์Œ ๊ฐ€์ ธ์˜จ ํ›„ ์ด์ƒํ•œ ์บ๋ฆญํ„ฐ

์— ๋งŒ๋“  2018๋…„ 09์›” 27์ผ  ยท  33์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: ipython/ipython

ํŒŒ์ด์ฌ 7.0.1์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ ์ฒซ ๋ฒˆ์งธ ๊ฐ€์ ธ ์˜ค๊ธฐ ํ›„์—๋Š” ๊ณ„์† ์ด์ƒํ•œ ๊ธฐํ˜ธ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค (์ฒจ๋ถ€ ๋œ ์Šคํฌ๋ฆฐ ์ƒท ์ฐธ์กฐ). ๋‹ค์‹œ Enter ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด ๊ธฐํ˜ธ๊ฐ€ ์‚ฌ๋ผ์ง€๊ณ  ๋‹ค์‹œ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Mac์˜ iterm2 ํ„ฐ๋ฏธ๋„์—์„œ ํ”ผ์‰ฌ ์‰˜์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

screenshot 2018-09-27 at 13 51 00

[์ตœ์‹  ์ •๋ณด]

prompt_toolkit์„ 2.0.6์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

help wanted

๋ชจ๋“  33 ๋Œ“๊ธ€

ํ  ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋ณด์•˜์ง€๋งŒ ^[[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์„ ํ”Œ๋Ÿฌ์‹œํ•˜๊ณ  ์ดˆ๊ธฐ ๊ฐ’์œผ๋กœ ๋ณต์›ํ•˜๋Š” ์‚ฌ์ด์˜ ๊ฒฝ์Ÿ ์กฐ๊ฑด์ž…๋‹ˆ๋‹ค.

๋ฒ„๊ทธ๋ฅผ ํ˜„์ง€ํ™”ํ–ˆ๋Š”์ง€ ๋˜๋Š” ์•„์ง ์‹คํ—˜ ์ค‘์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์ •๋ณด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • macOS 10.13.6
  • iTerm 3.2.1-์ฒซ ๋ฒˆ์งธ ์ž…๋ ฅ ํ›„ ํ•ญ์ƒ ^[[41;1R (๊ฐ€์ ธ ์˜ค๊ธฐ, ํ‘œํ˜„์‹, ๋นˆ ์ค„ ํฌํ•จ)
  • Terminal.app 2.8.2 (404)-์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค!
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์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฐจ์ด์ ์ด ์•ฝ๊ฐ„ ๋” ๊ฐ•ํ•ฉ๋‹ˆ๋‹ค.

screen shot 2018-10-12 at 10 03 56

#ansi ๋˜๋Š” #hex ์‚ฌ์šฉ ์—ฌ๋ถ€์— ๋Œ€ํ•ด ๋” ๋งŽ์€ ์ผ๊ด€์„ฑ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์–ด๋Š ์‹œ์ ์—์„œ ๋ฐ๊ธฐ ์˜ต์…˜์„ ์‚ดํŽด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๋ช‡ ์ฃผ ์ „์— ์ƒˆ๋กœ์šด ์ง์ฑ…์„ ์‹œ์ž‘ํ–ˆ์œผ๋ฉฐ IPython / jupyter ์ž์ฒด๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ์•ฝ๊ฐ„์˜ ์‹œ๊ฐ„์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํฅ๋ฏธ๋กญ์ง€ ๋งŒ ๋ง์ด๋ฉ๋‹ˆ๋‹ค. ์ƒ‰์ƒ์ด # 00ff00์œผ๋กœ ์ •์˜๋˜๋ฉด 256 ์ƒ‰์ƒ ํŒ”๋ ˆํŠธ์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ƒ‰์ƒ์„ ๋ณด์ง€๋งŒ 16 ansi ์ƒ‰์ƒ์„ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋‚˜๋จธ์ง€ 240 ์ƒ‰ ์ค‘์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ƒ‰์ƒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ์ด์œ ๋Š” ์š”์ฆ˜ ์‚ฌ๋žŒ๋“ค์€ ์ข…์ข… ANSI ์ƒ‰์ƒ์— ๋Œ€ํ•ด ์ •์˜ ๋œ ์‚ฌ์šฉ์ž ์ง€์ • ์ƒ‰ ๊ตฌ์„ฑํ‘œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ๋‚˜๋จธ์ง€ 240 ์ƒ‰์— ๋Œ€ํ•ด์„œ๋Š” ์ •์˜ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์•ฝ๊ฐ„ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์ง€๋งŒ ์‹ค์ œ๋กœ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ์‹ค์ œ ์ƒ‰์ƒ์— ํ›จ์”ฌ ๋” ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๊ธฐ๋ณธ ANSI ์ƒ‰์ƒ์ด ๋‹ค๋ฅธ ํ„ฐ๋ฏธ๋„์—์„œ ๋ Œ๋”๋ง๋˜๋Š” ๋ฐฉ๋ฒ•์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.
https://en.wikipedia.org/wiki/ANSI_escape_code#Colors

๊ณ ์ • ์—…์ŠคํŠธ๋ฆผ์œผ๋กœ ํ์‡„

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰