Jupyter Notebook에서 쉘 명령에 (의사적으로) 표준 입력을 제공합니다.

작은 재료입니다, 수요가 있는지 모르겠지만 ...

짧게


In[1]: std_in = input()
In[2]: !echo $std_in | your_command



문제



명령행에서 실행하는 명령 중 일부는 표준 입력을 받아들입니다. 위에 나타낸 cat 그렇습니다만, 현실적인 예로서는, 예를 들면, JUMAN++ 라고 하는 형태소 해석 소프트 1 는 표준 입력에 일본어의 문장을 건네주면, 형태소 해석 결과를 돌려줍니다.
$ jumanpp
これはペンです
これ これ これ 指示詞 7 名詞形態指示詞 1 * 0 * 0 NIL
は は は 助詞 9 副助詞 2 * 0 * 0 NIL
ペン ぺん ペン 名詞 6 普通名詞 1 * 0 * 0 "代表表記:ペン/ぺん カテゴリ:人工物-その他"
です です だ 判定詞 4 * 0 判定詞 25 デス列基本形 27 NIL
EOS

"이것은 펜입니다"가 표준 입력이고 그 이후의 행은 출력입니다.

이것을 Jupyter Notebook에서 움직이고 싶은 문제입니다.

전제 등



IPython/Jupyter Notebook에서는 줄 앞에 !를 붙이면 시스템 명령 2(쉘 명령)이 실행됩니다. (덧붙여 ls 와 같은 기본적인 명령의 몇개인가는 ! 를 붙이지 않아도 실행됩니다)
In [1]:!ls
       Applications/
       Desktop/
       Documents/
       ...

표준 출력은 파이썬 변수에 할당할 수도 있습니다.
In [1]:filesandfolders = !ls
In [2]:filesandfolders
       ['Applications',
        'Desktop',
        'Documents',
       ...]

반대로 파이썬 변수를 명령 인수로 만들 수도 있습니다. 변수 이름 앞에 $를 붙이면 명령 열에서 사용할 수 있습니다.
In [1]:text = 'Hello!'
In [2]:!echo $text
       Hello!

그러나 노트북에서는 앞의 예와 같이 표준 입력을 받을 수 없습니다. (jupyter==1.0.0, notebook==5.7.8) (ipython 인터프리터로 가능)

해결



파이썬 함수 input()는 표준 입력을 받아들입니다. Jupyter Notebook에서도 좋은 느낌의 입력창을 내줍니다. (``짧게'' 참조)
그렇게 받은 표준 입력을 echo 로 명령에 건네주면 OK.


소감


In [1]:!echo "これはペンです" | jumanpp

에서 부족하다. 하지만 표준 입력을 주고 싶은 경우도 있습니다.

참고문헌



Jupyter Notebook에서 시스템 명령을 실행하여 문자열 목록으로 가져옵니다.



Mecab 게다가 그렇습니다. ↩

뭐라고 부르는 것이 정확한지 모르겠습니다. 커맨드 라인에서 실행하는 소위 "명령"입니다. ↩

좋은 웹페이지 즐겨찾기