[Stackoverflow] 주피터 노트북에서 !와 %의 차이점은 무엇인가?

like_ej_·2022년 11월 1일
1

Stackoverflow 리뷰

목록 보기
2/2

What is the difference between ! and % in Jupyter notebooks?

질문 내용

!과 % 둘다 Jupyter Notebook에서 Shell 명령어를 실행하는 것을 허용합니다.

  • %IPython 커널에서 제공하며 또 "매직 명령어"를 실행하게끔 해주는데, 이는 잘 알려진 Shell 명령어도 포함되어있습니다.
  • !는 Jupyter에서 제공되는 것인데, 셀 안에서 실행될 수 있도록 Shell 명령어를 사용할 수 있게 합니다.

cd와 같은 간단한 쉘 명령어 같이, 저는 이 둘 사이의 차이점을 발견할 수가 없었습니다. 제가 본 주요 차이점은 %가 인터렉티브(interactive)하고 (Jupyter) 노트북을 실행시키는 동안 그 Shell의 경로를 변경할 수 있었습니다.

혹시 Jupyter Notebook에서 Shell 명령어를 사용하기 위한 심볼(! 나 % 둘 중)이 어떤 것인지 생각해볼 수 있는 차이점이 있을까요?


1 !는 Jupyter에서만 제공하는 것이 아닙니다. IPython kernel에서도 제공합니다. - prosoitos


답변

!%가 노트북에 연관된 프로세스에(또는 노트북 자체에 - 이는 많은 % 명령어가 쉘에 맞는counterpart^{counterpart}(?) 것이 없다.) 영향을 주는동안 (새로운 프로세스에서) 쉘 밖에서 호출합니다.

!cd foo는 경로를 변경하자마자 바로 그 프로세스를 종료시키기 때문에 이것 자체로 (!로 실행시킨 그 프로세스가 계속) 유지되는 효과는 없습니다.

%cd foo는 (Jupyter) 노트북 프로세스의 현재 경로를 변경하는데, 이는 (Jupyter Notebook 프로세스 내에서 그 명령이) 유지되는 효과가 있습니다.


2 참고로(As a sidenote) %ls는 색을 입혀서 표시할 수 있는데, !ls는 그렇지 않습니다. - Udayraj Deshmukh


%에서 반환되는게 만약 stdout이나 stderr일 때 (그러한 정보를) 표시하는 색이 입혀지는 반면, !에서 반환되는 것은 (비록 약간의 에러가 있긴 하지만) 문자열로 처리합니다. - Hardik Jain


profile
안녕하세요~!

0개의 댓글