์ ๋ช
๋ น์ ์คํํ๊ธฐ ์ํด ์ค๋ ๋ฉ ๊ทธ๋ฃน์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. sleep
๋ฅผ ํฌํจํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ํ ๋ก์ปฌ ํฐ๋ฏธ๋์ stdin
๋ถ๋ฆฌ๋ ์ํ๋ก ๋จ๊ณ (ํค ์
๋ ฅ์ ๋ช
๋ น์ค์ ํ์๋์ง ์์) ํฐ๋ฏธ๋์ ์ฌ์ค์ ํด์ผ ํฉ๋๋ค.
๋๋ ์ด๊ฒ์ ๊ฝค ์ฌ๋ฌ ๋ฒ ์๋ํ๊ณ ThreadingGroups์์๋ง ๋ฐ์ํ๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค(SerialGroups๋ ๊ด์ฐฎ์ต๋๋ค). sleep ๋ช ๋ น์ ํ ์ค(์ฒซ ๋ฒ์งธ ๋ช ๋ น, ์ค๊ฐ, ๋ง์ง๋ง)์ ์๋ฌด ๊ณณ์๋ ์์ ์ ์์ผ๋ฉฐ ์ธ๋ฏธ์ฝ๋ก ์ด๋ ์ด์ค ์ฐํผ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํ ์ค์์ ๊ฒฐํฉํ ์ ์์ต๋๋ค. ๋ชจ๋ ๋ช ๋ น์ด ์์๋๋ก ์คํ๋์ง๋ง ํฐ๋ฏธ๋์ ์๋ชป๋ ์ํ๋ก ๋จ์ ์์ต๋๋ค.
์ด์ํ๊ฒ๋ ์ด์ ์คํ์ด ์กํ์ง ์์ ์์ธ๋ก ์ข ๋ฃ๋ ๊ฒฝ์ฐ ํฐ๋ฏธ๋์ ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค.
์ฌํํ๋ ค๋ฉด:
from fabric import ThreadingGroup as Group
# raise ValueError()
remotes = Group("host1.example.com", "host2.example.com")
result = remotes.run("echo 1; sleep 1; echo 2")
์์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํฉ๋๋ค. ์ข
๋ฃ ํ ๋ช
๋ น์ค์ ์
๋ ฅํฉ๋๋ค. ์ถ๋ ฅ์ด ํ์๋์ง ์์ผ๋ฉด <ctrl>+c
๋ฅผ ์
๋ ฅํ๊ณ reset<enter>
ํฉ๋๋ค. ์ฌํ ์์ธ ๋์์ ๋ณด๋ ค๋ฉด raise
ํ์ ์ฃผ์ ์ฒ๋ฆฌ๋ฅผ ์ ๊ฑฐํ๊ณ ์ฝ๋๋ฅผ ์คํํ๊ณ ํ์ ์ฃผ์์ ๋ฌ๊ณ ๋ ๋ฒ ๋ ์คํํฉ๋๋ค. ์ฒซ ๋ฒ์งธ ์ฑ๊ณต์ ์ธ ์คํ์ ํฐ๋ฏธ๋์ ์ํธํ ์ํ๋ก ์ ์งํฉ๋๋ค. ๋ ๋ฒ์งธ๋ stdin
๋ถ๋ฆฌ๋ ์ํ๋ก ๋ก๋๋ค.
ํ
์คํธ์์ sleep
์์ ์ด ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ์ง๋ง ๋ค๋ฅธ ๋ช
๋ น์ด ๋์ผํ ํจ๊ณผ๋ฅผ ๋ผ ์๋ ์์ต๋๋ค. ๋ด๊ฐ ๋ญ๊ฐ๋ฅผ ์๋ชปํ๊ณ ์์ ๊ฐ๋ฅ์ฑ๋ ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ฌ๊ณผ๋๋ฆฝ๋๋ค.
๋ด ์ค์ :
ํ์ด์ฌ 3.6.4
ํจ๋ธ๋ฆญ 2.1.3
OSX 10.13.5, Ubuntu 14.04์ ์ฐ๊ฒฐ
์ฌํ ๊ฐ๋ฅํ ๋ ๋ฒ์งธ ๋ฌธ์ ์ฌ๋ก๋ก #1814๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
์ด๊ฒ์ ๋์๊ฒ ํฉ๋ฒ์ ์ธ ๋ฒ๊ทธ์ฒ๋ผ ๋ค๋ฆฌ๊ณ ๋ฌด์์ด ์์ธ์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ํฐ๋ฏธ๋ ํ์ดํ๊ฐ ํ ๋ฒ์ ์ฌ๋ฌ ํ์ ํ๋ก์ธ์ค์ ์ฐ๊ฒฐ๋๋ ์ผ๋ฐ์ ์ธ Unix ๋ฌธ์ ์ด๊ฑฐ๋ (ํนํ #1814์ ์์ ๋ฐ๋ผ) ํ์ดํ ์ํ ์ฃผ๋ณ์ ๊ฒฝ์ ์กฐ๊ฑด ๋ฑ์ ๋์๊ฐ ๋ ์ ์์ต๋๋ค.
์์ธ/ํด๊ฒฐ์ฑ ์ ์ฌํํ๊ณ ํผ๋์ค๋ฝ๊ฒ ๋ง๋ค ๊ฒ์ ๋๋ค.
๋ํ ์ด๊ฒ์ ์๋ง๋ Invoke ์์ค์์ ์์ ํด์ผ ํ๊ณ ์์ ํ ํด๋น ๋๋ฉ์ธ์ ์์ ์ ์์ต๋๋ค. ๊ฑฐ๊ธฐ์์๋ ์ผ์ด๋์ผ ํจ). ์ด ๊ฒฝ์ฐ ์ด๋ฅผ ํฐ์ผ์ผ๋ก ์ฎ๊ธฐ๊ณ Fabric "์์ "์ ์์ ์ฌํญ์ด ๋ฆด๋ฆฌ์ค๋๋ฉด Invoke๋ฅผ ์ ๊ทธ๋ ์ด๋ํ๋ ๊ฒ์ ๋๋ค.
๋๋ Ubuntu 16.04.2์ ์ฐ๊ฒฐ๋์ด์์์ต๋๋ค.
#1829์ ๋์ผํ ๋ฌธ์ ์ ๋ํ ๋ ๋ค๋ฅธ ๋ณด๊ณ ์. ์ด๊ฒ์ ๋ด ๋ค์ ๋ฒ๊ทธ ์์ ์ด์ ํ์ ์์ผ๋ฉฐ ๋ค์ OSS ๋ (์)์ ์ง์คํ ๊ฒ์ ๋๋ค.
๋ฐฉ๊ธ ์ด๊ฒ์ ์ฌํํ๋ ค๊ณ ์๋ํ์ง๋ง(2.0 ๋ถ๊ธฐ, Python 3.6.4, macOS 10.12) ๋ถํํ๋ ํ ์ ์์์ต๋๋ค. ๋จผ์ ์ด์ค ๋ก์ปฌ ํธ์คํธ๋ฅผ ์๋ํ ๋ค์ ๋ ๊ฐ์ ๊ฐ๋ณ ์๊ฒฉ ํด๋ผ์ฐ๋ ์ธ์คํด์ค๋ฅผ ์๋ํ์ต๋๋ค. ์ด๋ ์ชฝ์ด๋ ์ฃผ์ฌ์๊ฐ ์์ต๋๋ค. ๋ด ํฐ๋ฏธ๋์ ๋์ค์ ๊ด์ฐฎ์ต๋๋ค.
๋์์ด ๋๋ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ Linux ์ปจํ ์ด๋๋ฅผ ์กฐ๊ธ ์๋ํด ๋ณด๋ ค๊ณ ํฉ๋๋ค. ํ์ง๋ง OP๊ฐ macOS์๋ ์๊ธฐ ๋๋ฌธ์ ์ฐจ์ด๊ฐ ์์์ง ํ์ ํ ์ ์์ต๋๋ค. ๋ํ ๋ฃจํ์์ ์คํํ์ฌ ๊ฐ๋ ๋ฐ๋ณต๋๋์ง ํ์ธํ๊ฒ ์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ 2.1์์ ๊ทธ๊ฒ์ ์ด๋ป๊ฒ๋ ๋์ ํ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ 2.1์์๋ ๊ทธ๊ฒ์ ์๋ํ ๊ฒ์ ๋๋ค.
@jensenak @nicktimko ์ด๊ฑฐ 100% ์ฌํํ์๋์? 50%? 5%?
@bitprophet 2.1.3์์๋ ์ค์ ์ํฌํ๋ก์์ ์๋นํ ์์ฃผ ๋ฐ์ํ์ต๋๋ค(>80%, ์ ๋ 2
@bitprophet ์ด๊ฒ์ ์ ์๊ฒ 100% ์๊ฐ์ด์์ต๋๋ค. ํ์คํ ํ๊ธฐ ์ํด ํจ๋ธ๋ฆญ๋ง ์ค์น๋ ์๋ก์ด virtualenv๋ฅผ ์์ํ์ต๋๋ค. 2.0, 2.1 ๋ฐ 2.2๋ฅผ ํ ์คํธํ์ต๋๋ค. ๋ด๊ฐ ๋ถ์ฌ ๋ฃ์ ์์ ์ฝ๋๋ ๋งค๋ฒ ์ค๋ช ๋ ๋์์ ์์ฑํ์ต๋๋ค. ๋ชจ๋ ํ ์คํธ์์ Ubuntu 14.04 ๋ฆฌ๋ชจ์ปจ์ ์ฐ๊ฒฐํ์ต๋๋ค.
๋ค๋ฅธ ๋ฒ์ ์ OSX(10.13)๋ฅผ ์ฌ์ฉ ์ค์ ๋๋ค. ์๋ง๋ ๊ทธ๊ฒ์ด ๊ด๋ จ์ด ์์ต๋๊น? @nicktimko ๋ OSX์ ์ ํ ์์์ต๋๋ค.
๋ค๋ฅธ ๋ฒ์ ์ด ๋ฌธ์ ์ธ ๊ฒฝ์ฐ ๋ด virtualenv์์ pip freeze
๊ฐ ๋ค์๊ณผ ๊ฐ์ด ํ์๋ฉ๋๋ค.
asn1crypto==0.24.0
bcrypt==3.1.4
cffi==1.11.5
cryptography==2.3
fabric==2.2.1
idna==2.7
invoke==1.1.0
paramiko==2.4.1
pyasn1==0.4.4
pycparser==2.18
PyNaCl==1.2.1
six==1.11.0
์ด ๋ชจ๋ ๊ฒ์ด Fabric 2.2์ ์ข ์์ฑ์ผ๋ก ์ค์น๋์๊ธฐ ๋๋ฌธ์ ๊ทํ์ ๋ฒ์ ์ด ๋น์ทํ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค.
์ ๊ฐ ๋์ธ ์ ์๋ ์ผ์ด ๋ ์๋ค๋ฉด ๊ธฐ๊บผ์ด ๋์๋๋ฆฌ๊ฒ ์ต๋๋ค. ๋ค๋ฅธ ๊ณณ์ ๋ด์ผํ ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ด๋ค ์ปค๋ฐ์ผ๋ก ํ
์คํธํด์ผํฉ๋๊น? ์ต๊ทผ์ ์ํฅ์ ๋ฏธ์น ์ ์๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ต๋๊น? ์์ ๋๊ฒฐ๋ก ์๋ํ ๊ฒ์
๋๋ค. ๋ ๋ค๋ฅธ ๋๊ฒฐ๋ reqs.txt
์ ๊ณตํ ์๋ ์๊ณ ๊ทธ๊ฒ์ด ์๋ํ๋์ง/์ ์๊ฒ ๋ง์ง ์๋์ง ์ ์ ์์ต๋๋ค.
@nicktimko @jensenak ์ถ๊ฐ ์ ๋ณด ๊ฐ์ฌํฉ๋๋ค. ๋๋ ๊ทธ๊ฒ์ ์ฌ๊ธฐ์์ ์ฌํํ๋ ค๊ณ ๊ณ์ ๋ ธ๋ ฅํ ๊ฒ์ ๋๋ค. 20%์์๋ ํ์คํ ํธ๋ฆฌ๊ฑฐํ ๋งํผ ์ถฉ๋ถํ ์๋ํ์ง ์์์ ๊ฒ์ ๋๋ค. ๋ด ๋ฆฌ๋ชจ์ปจ์ Mac๊ณผ ์ผ๋ถ ์ค๋๋ ๋ฐ๋น์์ด์๊ณ , ์ฐ๋ถํฌ ํธ๋ฌ์คํฐ๊ฐ ๊ทธ๊ฒ์ ํน์ ํ ๊ฒฝ์ฐ๋ฅผ ๋๋นํด Ubuntu Trusty๋ฅผ ์ฌ์ฉํด ๋ณผ ์ ์์ต๋๋ค(์ด์ํ์ง๋ง ์ด ๋ชจ๋ ๊ฒ์ด ์ด์ํฉ๋๋ค.)
๋ํ ๋ก์ปฌ ์ ํ๊ฒฝ์ ๋ฌด์์ ๋๊น? ๋ด ๊ฒ์ tmux ๋ด๋ถ์ Terminal.app ๋ด์ฅ (๋ค์ macOS 10.12)์์ zsh์ ๋๋ค. ๋๋ ๋ํ ๊ทธ ๊ฐ๋์ ๋ํด ์ฝ๊ฐ์ ์์ด์ ์๋ํ ๊ฒ์ ๋๋ค.
์ํ. ์ด๊ฒ์ bash์๋ง ํด๋น๋๋ ๊ฒ ๊ฐ์ต๋๋ค! ์ฌ์ ํ tmux ์ธ๋ถ์ zsh์์ ์ฌํํ ์ ์์์ง๋ง bash์์ ์๋ํ๋ ์๊ฐ ์ธ๊ธ๋ ์ฆ์์ด ์ฆ์ ๋ํ๋ฉ๋๋ค. tmux ๋ด๋ถ์ ๋์ผํ๋ฏ๋ก tmux์๋ ๋ฒ ์ด๋ง์ด ์์ต๋๋ค. ์ด๋ ์ ๋ฌธ์ ์ ๋๋ค.
_์_ ์ด๊ฒ์ bash์ zsh์์ ๋ค๋ฅด๊ฒ ๋์ํ ๊ฒ์ ๋๋ค. ์ฆ๊ฐ์ ์ธ ์์ด๋์ด๋ ์์ต๋๋ค. ๊ตฌํ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์ต๋๊น? ์๋๋ฉด ๋ด zsh dotfiles์ ๋ฌด์ธ๊ฐ๊ฐ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ณ ์์ต๋๊น? ํ๊ธฐํด์ผ ํ ๊ฒ์ ๋๋ค ... Python ์ธก์์ ์๋ฃจ์ ์ ์๋ณํ๋ ๊ฒ์ด ์ด๋ ์ชฝ์ด๋ ๊ฐ์ฅ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
ํธ์ง: ๋ํ ๋ด ๋ก์ปฌ ํธ์คํธ์ sshd์ ๋์์ ์ฌ๋ฌ ๋ฒ ์ฐ๊ฒฐํ ๋๋ ์ฌ์์ฐ์ด ๋ฐ์ํ๋๋ฐ, ์ด๋ ๊ทธ๋ฆฌ ๋๋ผ์ด ์ผ์ด ์๋๋๋ค. ๋ฐ๋ผ์ ์๊ฒฉ ๋์ ์ค์ํ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๋ํ "์ด์ ์คํ์ ์ ์ธํ ์ด์ ์คํ์ ๋ค์ ์คํ์ ๋ํ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํจ"์ ๋ํ ๋ฉ๋ชจ๋ฅผ ํ์ธํ๋ ค๊ณ ์๋ํ์ง๋ง ์ ์๊ฒ๋ ๋ฐ์ํ์ง ์์์ต๋๋ค. ๋๋ ๊ด๊ณ์์ด ๋งค๋ฒ ํ๋์ ์ป์ต๋๋ค.
Moar: ์ด๋ป๊ฒ ๋ ์ง ๋ณด๊ธฐ ์ํด sleep
๋ฅผ ์ ๊ฑฐํ์ต๋๋ค. ์ง๊ธ์ ์ฝ๊ฐ ๋ ๊ฐํ์ ์ด์ง๋ง ์ฌ์ ํ ์ฌํํ ์ ์์ต๋๋ค(์๋ ๋ฃจํ์์ ์ฌํํ๊ธฐ ์ฝ์ง ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ์์ผ๋ก ์ฌํํฉ๋๋ค. ์ฆ, ํ
์คํธ ์ผ์ด์ค ์๊ฐ ์ ๊ณ ์ค์ ๋ฐ์๋ฅ ์ด ์ค์ ์ผ ๊ฒ์์ ์๋ฏธํฉ๋๋ค. ์ ํํ ์ธก์ ์ด ์ด๋ ต์ต๋๋ค.)
๊ทธ๊ฒ๋ ์ข์ต๋๋ค. ์ด์ํ ํธ๋ฆฌ๊ฑฐ๊ฐ ์ ์์๋ก ์ข์ต๋๋ค. ์ด๊ฒ์ ์ด๋๊ฐ์ ๊ธฐ๋ณธ์ ์ด๊ณ ๋ฉ์ฒญํ ์ค๋ ๋ฉ ์ค์์ผ ๊ฒ ๊ฐ์ _should_์ด์ด์ผ ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๊ฒฝ์ ์กฐ๊ฑด(๋๋ w/e)์ ๋ ๋ง์ด ๋ง๋๋ ์๊ฐ์ ์ ์ธํ๊ณ ์๊ฒฉ ๋๋ ๋ก์ปฌ ๋์ ํน์ ํญ๋ชฉ์ ์ํด ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค.
์ด๊ฒ์ด Invoke์ ์์ธ ์ฒ๋ฆฌ ์ค๋ ๋ ํ์ ํด๋์ค(์ฌ๊ธฐ์ ThreadingGroup์์ ์ฌ์ฉ๋จ)๋ก ์์ฝ๋๋ pyinvoke/invoke#552์ ๊ด๋ จ์ด ์๋์ง ๊ถ๊ธํ์ฌ ์ค๋ ๋ ์ฃฝ์ ๊ฐ์ง๋ฅผ ๋ง์ณค์ ์ ์์ต๋๋ค.
(์ ์ฌ์ ์์ ์ธ pyinvoke/invoke#553์ด ์ธ์คํ ๋ณํฉ์ด ์๋๋ผ๋ ์ ์ ์ดํดํ๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๋ญ๊ฐ ๋ช ๋ฐฑํ๊ฒ ๊ธฐ๋ฅ์ ์ด์ด์ ์๋ชป๋ ๊ฒ์ ์ป์ ๊ฒ์ด ์ด์ํด ๋ณด์๊ธฐ ๋๋ฌธ์ ๋๋ค.) ๊ทธ๋ฐ ๋ค์ ์ ์ฉ ์ฌ๋ถ๋ฅผ ํ์ธํด์ผ ํฉ๋๋ค. ์ด ์ฆ์์ด ์ฌ๋ผ์ง๋๋ค.
๋๋ ๋ฌด์จ ์ผ์ด ์ผ์ด๋ ์ง ๋ณด๊ธฐ ์ํด ์ ์ ์ ๊ฑฐํ๋ค. ์ง๊ธ์ ์ฝ๊ฐ ๋ ๊ฐํ์ ์ด์ง๋ง ์ฌ์ ํ ์ฌํํ ์ ์์ต๋๋ค.
๋ด๊ฐ ๊ฐ์ง๊ณ ์๋ ํ ์คํธ ์ผ์ด์ค์ฒ๋ผ ๋ค๋ฆฌ๋๋ฐ, ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ๊ธฐ ์ ์ ๋ช ๋ฒ ์ณค์ด์ผ ํ์ต๋๋ค. ์ ๋ค๋ฃจ์๋ ๊ฒ ๊ฐ์ต๋๋ค
๋๋ ์ค๋ ๋ด๊ฐ ํ ๋ฌ ์ ์ ์ค๋ช ํ ์์ธ ๋์์ ์ฌํํ ์ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค... ๋ถํํ๋ ๋๋ ๊ทธ๋ ๋ฌด์์ ํ๊ณ ์์๋์ง ๊ธฐ์ต์ด ๋์ง ์์ต๋๋ค. :/
๋๋ ์ค์ ๋ก ์ฌ๊ธฐ์ bash๋ฅผ ์คํํ๊ณ ์์ต๋๋ค. ์ ์ฐพ์์ต๋๋ค. ๋ฌธ์ ๊ฐ ์ ์ ์์ง ์๊ณ ๊ฐํ์ ์ผ๋ก ๋ฐ์ํ๋ค๋ ์ฌ์ค์ ์ด๊ฒ์ด ์ผ์ข ์ ๊ฒฝ์ ์กฐ๊ฑด์ธ์ง ๊ถ๊ธํ๊ฒ ๋ง๋ญ๋๋ค.
๋น์ ์ ๊ทธ๋ ๊ฒ ๋งํ์ง๋ง ์ง๊ธ์ ๊ทธ๊ฒ์ ๋ค์ ์ฌํํ ์ ์๊ฑฐ๋ ์ต์ํ ๋งค์ฐ ๊ฐํ์ ์ ๋๋ค. ๋ค์ ์ ์ ์๊ฒ ํ๋ฉด ์ ์ด ํจ์ฌ ๋ ์์ฃผ ์ผ์ด๋๊ฒ ๋ฉ๋๋ค. ๋ ์ด์ค ์กฐ๊ฑด์ ์ข์ํด์ผ ํฉ๋๋ค.
Invoke ๋ฌธ์ ๋ฅผ ๋ณด๋ฉด ๊ธฐ์๋ ์๋ง์ธ ํฐ๋ฏธ๋์ ์ฆ์์ผ๋ก ์ธ๊ธํ๊ธฐ๋ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด์ํ๊ฒ๋ ๋๋ ๊ทธ์ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ bash์์๋ _๊ทธ_ ์ฆ์์ ์ฌํํ ์ ์์ต๋๋ค. ๊ทผ๋ณธ ์์ธ์ด ๊ฐ๋ค๋ฉด ์ฌ์ ํ ๋๋ผ์ง ์์ ๊ฒ์ ๋๋ค(์ฐ๋ ๋ ์ข ๋ฃ ๋ฐ stdin์ด ๋ซํ๋ ๊ฒ๊ณผ ๊ด๋ จ์ด ์๊ฑฐ๋ ์ข ๋ฃํ๊ธฐ ์ ์ ์ ์ ํ๊ฒ ๋ผ์ธ๋ณ ๋ฒํผ๋ง์ผ๋ก ๋ค์ ์ค์ ํด์ผ ํจ).
์ฌ๊ธฐ์์ ์ฌํ ์ฌ๋ก์ ๋ํด ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ์ธ๊ธํ ๋ถ๋ถ์ ํ์ธํฉ๋๋ค.
ExceptionHandlingThread.is_dead
๋นํธ๋ ์ค์ํ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ์๋ง๋ ์ ํํ ๊ฒ์
๋๋ค. ์ด๋ ์ค๋ ๋์์ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๊ฒ์ด๊ณ ์ด๋ฌํ ๊ฒฝ์ฐ ์ค ์ด๋ ๊ฒ๋ ์ค์ ๋ก ์์ธ๋ฅผ ์ฒ๋ฆฌํ์ง ์๊ธฐ ๋๋ฌธ์ ์ด๋ ์ ๋ ์๋ฏธ๊ฐ ์์ต๋๋ค. is_dead
๋ ๋ด๊ฐ ์์ํ ๋ ๋ชจ๋ 3๊ฐ์ ์์
์ ์ค๋ ๋(stdin/out/err)์ ๋ํด False
์
๋๋ค.๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์๋ํ๋ ์ค์
๋๋ค. ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ ํ ํฐ๋ฏธ๋ ํ๊ฒฝ์ด ์ ํํ ์ด๋ป๊ฒ ๋ณ๊ฒฝ๋์์ต๋๊น? ๋ฒ๊ทธ ์์ ์ ๋ฌด์ ๊ด๊ณ์์ด bash์์ stty -a
์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฐจ์ด์ ์ด ์์ต๋๋ค.
lflags
: ๋ฒ๊ทธ๊ฐ ์๋ ํฐ๋ฏธ๋์๋ -icanon
, -echo
, -pendin
(๋ชจ๋ ๋นผ๊ธฐ ๊ธฐํธ๊ฐ ์๋ ์ผ๋ฐ ์ฉ์ด์ ๋น๊ต). ์์ฝํ์ง ์๋ ๊ฒ์ ๊ทธ๊ฒ์ด ์๋ฏธํ๋ ๋ฐ๋ผ๊ณ ๊ฐ์ ํ ๋ ํ์คํ ๋ฌธ์ ์ฒ๋ผ ๋ณด์
๋๋ค.iflags
: bugged-out์๋ -ixany
๋ฐ ignpar
(์๋ชป๋ ์ค์ ์์ ์ค์ ๋์ง ์์ ๊ฒ์ด ์๋๋ผ ์ค์ ๋๋ ์ฒซ ๋ฒ์งธ ์).oflags
๋ฐ cflags
๋์ผ, ๊ฐ์์๋ค cchars
(I ์ค์ ์ง๋ด์ง ํ ๊ฒ ์ ์ด ๋ฌธ์๋ฅผ ๋ณ๊ฒฝ ํ ๊ฒฝ์ฐ ...)man stty
์ ๋ฐ๋ฅด๋ฉด:
icanon
๋ ERASE ๋ฐ KILL ์ฒ๋ฆฌ๋ฅผ ์ ์ดํฉ๋๋ค. ์๋ง๋ ํฐ ์ฐจ์ด๋ ์๋ ๊ฒ์
๋๋ค(์ด๊ฒ์ด ์ค์ ๋๊ฑฐ๋ ์ค์ ๋์ง ์์ ์ด์ ๋ ํฅ๋ฏธ๋ก์ธ ์ ์์)echo
๋ ์๋ฆฌ๊ฐ ๋๋์ง ์ฌ๋ถ, ์์ฝ ์ฌ๋ถ์ด๋ฉฐ ๋ถ๋ช
ํ ๋ฒ๊ทธ์ ๊ฐ์ฅ ํฐ ์ค์ ๋ฌธ์ ์
๋๋ค.pendin
๋ ํ์ค ์ค์์น ์ดํ์ ์
๋ ฅ(stdin์ผ๋ก ๊ฐ์ )์ด ๋ณด๋ฅ ์ค์ธ์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ฉฐ( icanon
๊ฐ ๋ช
ํํ๊ฒ ๋ค์งํ๊ธฐ ๋๋ฌธ์...์) ์ฝ๊ธฐ๊ฐ ๋ณด๋ฅ ์ค์ด๊ฑฐ๋ ๋ ๋ง์ ์
๋ ฅ์ด ๋ ๋ ๋ค์ ์
๋ ฅ๋ฉ๋๋ค. ๋์ฐฉ. ์ด๊ฒ์ด ์ ์ค์ํ์ง ๋๋ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ์ ๋ ์ ์์ ์ผ๋ก ์ค์ ๋๊ณ ์ค์ ๋์ง ์์ ์ด์ ๊ฐ ๋ช
ํํ์ง ์์ต๋๋ค(ํ์๊ฐ ์๋ค๋ฉด ํ์๋ฅผ ์์ํ์ ๊ฒ์
๋๋ค.)ixany
๋ ๋ชจ๋ ๋ฌธ์๊ฐ '์ถ๋ ฅ ์์'์ ํ์ฉํฉ๋๋ค(์ค์ ๋์ง ์์ ๊ฒฝ์ฐ START๋ง ํ์ฉํฉ๋๋ค. ok?)ignpar
๋ ํจ๋ฆฌํฐ ์ค๋ฅ๊ฐ ์๋ ๋ฌธ์๋ฅผ ๋ฌด์(๋๋ ์ค์ ํด์ , ๋ฌด์ํ์ง ์์)ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.๋์ฒด๋ก ์ฌ์ฉ์ ๋งค์ฌ๊ฐ ์ ๋ ฅ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๋์ ํ ๋ฒ์ 1๋ฐ์ดํธ๋ฅผ ์ฝ์ ์ ์๋๋ก stdin์ ๋ฌธ์ ๋ฒํผ ์ฝ๊ธฐ๋ก ์ค์ ํ๋ ๊ฒ๊ณผ ์ ์ฌํ๊ฒ ๋ ๋์ ์์ค์ '๋ชจ๋'๊ฐ ํฐ๋ฏธ๋์ ์ ์ฉ๋๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ด๋ ํ์ ์ค์ธ ๋์(์ผ์ข ์...)์ฒ๋ผ ๋ค๋ฆฌ๋ฉฐ ์ด์ ์ ๊ถ๊ธํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ฌธ์ ์ ์ฝ๋๋ฅผ ์ฝ์ผ๋ฉด(Invoke ํจ์น์์๋ ์ด๋ฅผ ์ธ๊ธํ์ง๋ง re: thread death), ๋ชจ๋ ๋ณ๊ฒฝ์ ์ปจํ ์คํธ ๊ด๋ฆฌ์๋ก ํํ๋๋ฏ๋ก ๋ฃจํ๋ฅผ ์ด๋ป๊ฒ ๋ฒ์ด๋๋์ง์ ๊ด๊ณ์์ด ํญ์ ์ค์ ํด์ ๋์ด์ผ _ํด์ผ ํฉ๋๋ค_. ํ์ง๋ง ์ง๊ธ์ ์ธ ๋ฒ ํ์ธํด์ผ ํฉ๋๋ค.
๋ง์ด๋ : ๋จ์ํ ๋งํ๋ stty echo
์ค์ echo
'์์ 'ํฐ๋ฏธ๋์ ์ถฉ๋ถ๋ฅผ; icanon
, pendin
๋ฑ์ด ์์ง ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ์๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค. ๋ณ ๋์์ ์๋์ง๋ง ์์๋์๋ฉด ์ข์ ๊ฒ ๊ฐ์์.
์ข์์! ๋๋ ๊ทธ contextmanager๋ฅผ ๋ฐ๋ผ๋ณด๋ฉด์ ๊ทธ๊ฒ์ ์์๋๋ค๊ณ ์๊ฐํ๋ค. ์๋ง๋ contextmanager๊ฐ ๋ธ๋ก์ ๋ซ์ ๋ ๋ณต์์ ์ํด ํ์ฌ ํฐ๋ฏธ๋ ์ํ๋ฅผ ์ค๋ ์ทํ๊ธฐ ๋๋ฌธ์ผ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ ์ด ๊ฒฝ์ฐ์ ์ฐ๋ฆฌ๋ ๋ฌด์์ ํ๊ณ ์์ต๋๊น? ์ฐ๋ฆฌ๋ _๋ ๊ฐ์ ๊ฐ๋ณ ์์ ์์ค ์ค๋ ๋_๋ฅผ ์คํํ๊ณ ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ์ด ์ปจํ ์คํธ ๊ด๋ฆฌ์์ _์์ฒด ์ฌ๋ณธ_์ ์คํํ๊ณ ์์ต๋๋ค!
๊ทธ๋ฆฌ๊ณ Invoke์์๋ ์ค๋ ๋์ธ์ดํ๋ฅผ ์๋ํ์ง๋ง ํ์ฌ ์์ฒด ์ ์์ค IO ์ค๋ ๋ ์ธ์๋ ํ ์คํธํ์ง ์์ต๋๋ค. "์ค๋ ๋ ์์ ์ฑ"์ 99%๋ ๋จ์ํ Fabric 1์ ๋์ฐํ ์ ์ญ ๋ชจ๋ ์ํ ๋์ ์์ฒด ํฌํจ๋ ๊ฐ์ฒด ์ํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ ์ด ํน์ ์ํ ์ ์ง ๋นํธ๋ ๊ทธ ์์ฒด์ ๋์์ ์คํ๋์ง ์์ต๋๋ค(๋ถ๋ถ์ ์ผ๋ก "์ํ"๊ฐ ๋ง ๊ทธ๋๋ก ์ ์ด ํฐ๋ฏธ๋์ด๊ณ , ๊ทธ ์ค ํ๋๋ ๋จ ํ๋์ด๋ฏ๋ก...์ ์ญ ์ํ...).
๋๋ ์์ง ๊ทธ๊ฒ์ 100% ์ฆ๋ช ํ์ง ์์์ง๋ง(๊ณง) ์ด๊ฒ์ด ์๋ ๋ฐฉ๋ฒ์ ์์ต๋๋ค. ๋ ๋ฒ์งธ๋ก ์คํ๋๋ ์ค๋ ๋๋ ์ฒซ ๋ฒ์งธ ์ค๋ ๋๊ฐ ์ด๋ฏธ ์ด๋ฅผ ๋ฌธ์ ๋ฒํผ ๋ชจ๋๋ก ์ค์ ํ _์ดํ_ ์ ์ด ํฐ๋ฏธ๋ ์์ฑ์ ์ค๋ ์ทํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ๊ทธ๋ฐ ๋ค์, ๊ทธ ๋ ๋ฒ์งธ ์ค๋ ๋๊ฐ ๋ ๋ฒ์งธ๋ก _๋ง๊ฐ__ํ๋ฉด(๋ค์ ๋งํ์ง๋ง ํ์คํ์ง๋ ์์ง๋ง) ์๋ชป๋ ์ํ๋ฅผ "๋ณต์"ํ์ฌ ์ฒซ ๋ฒ์งธ ์ค๋ ๋์ ๋ณต์์ ํจ๊ณผ์ ์ผ๋ก ์ทจ์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด ECHO ํ๋๊ทธ๊ฐ ์ฒซ ๋ฒ์งธ๊ฐ ์๋ ์ปจํ ์คํธ ๊ด๋ฆฌ์์ ์ํด ํ์คํ ์ค๋ ์ท๋ ๋ค์ ๋์ผํ๊ฒ ๋ณต์๋๋์ง ํ์ธํ์ต๋๋ค. ์๋ฃจ์ ์ ๋ํ ์์ ์ "setcbreak๊ฐ ์ด๋ฏธ ์ ์ฉ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋์ง ํ์ ํ๋ ค๊ณ ์๋ํ๊ณ ์ค๋ ์ท-์์ -๋ณต์ ๋์ค๋ฅผ ์ํํ๋ ๋์ ์๋ํ์ง ์๋" ๊ฒ์ผ๋ก ๋๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์๋ํ ํจ๊ณผ๊ฐ ์์ด์ผ ํ๊ณ ๋ถํ ํ๊ธฐ์ ์ฝ๊ฐ ๋ ๊นจ๋ํ๊ณ (setcbreak >1๋ฒ ์คํํ์ง ์์) ์์งํ ์์ ์ด ํญ์ ECHO ๋ฑ์ "on"์ผ๋ก ์ค์ ํ ์ ์๋ ์ฝ๋ ์ผ์ด์ค๋ฅผ ํผํฉ๋๋ค. ๋ฌธ์ ์ ์คํธ๋ฆผ์ด ๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ ์ค๋จ๋ฉ๋๋ค. tty์ ๋น์ทํ์ง๋ง ์์ฝํ์ง ์๋๋ก _์ด๋ฏธ_ ์ค์ ๋์์ต๋๋ค. (ํ์คํ์ง๋ ์์ง๋ง ๋ถ๊ฐ๋ฅํ์ง๋ ์์ ๊ฒ์ ๋๋ค.)
์ด๊ฒ์ Invoke ์ ์ฉ ๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์ ํด๋น ํธ๋์ปค์ ๋ํด ์ค๋ช ํ๊ฒ ์ต๋๋ค. ๊ณง ํ ์คํธ ๋ฐ ์์ ์ด ์๋ฃ๋ ๊ฒ์ผ๋ก ๊ธฐ๋ํ๊ณ ์์ง๋ง ์ถ๊ฐํ ๋ค๋ฅธ ๊ฒ์ด ์์ผ๋ฉด https ๋ก ์ด๋
๋ช ํํ๊ฒ ํ์๋ฉด, ์ผ๋จ ์์ ๋๋ฉด Invoke 1.0.2/1.1.1(๋์์ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ 1.2.0 ๊ฐ๋ฅ)์ ์์ด์ผ ํ๋ฉฐ _no_ ํจ๋ธ๋ฆญ ์ ๊ทธ๋ ์ด๋๊ฐ ํ์ํ๊ณ Invoke๋ง ์์ด์ผ ํฉ๋๋ค.
@bitprophet Invoke๋ฅผ ์
๊ทธ๋ ์ด๋ ํ ํ ์๋ํฉ๋๋ค :)
๋น์ ์ ๋
ธ๊ณ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.