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 게다가 그렇습니다.

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

좋은 웹페이지 즐겨찾기