buq’s blog

覚えておきたいけど覚えておけなさそうなことを書きます?

ipython notebook のファイルをダブルクリックで開く @ OS X

ipython notebook の .ipynb ファイルをダブルクリックで開きたい人がいます(私です).

他のひともそういうことを考えているみたいです👸

osx mountain lion - Open an ipython notebook via double-click on osx - Stack Overflow

上記のリンクでは Ubuntu ようのシェルスクリプトがのっていますが, OS X の Finder はシェルスクリプトに優しくないのでこのままでは使えません💢✋

この記事では Finder と 上記のスクリプトをつなぐ glue を OS X に付属する Automator で作る…というのをやります😩

やりかた

1. Automator を起動 & 新規ファイルで Application をえらぶ f:id:buq:20150819214227p:plain

2. run shell script を左上の検索欄からしらべる f:id:buq:20150819214329p:plain

3. このアクション(というのかな?)を右の Application receives files and folders as input というところの下にドラッグしていきます.勝手に繋がります👺👍✨f:id:buq:20150819214908p:plain 右上の pass input: というところを as arguments にしておきます.

4. シェルスクリプトを書きます.このスクリプトosx mountain lion - Open an ipython notebook via double-click on osx - Stack Overflow を改変したものです.ここからはただのシェルスクリプトなので,好きなことを書けばいいです👮 アプリとして適当な場所に保存します.

PORTSTAT_IPYNB=`netstat -tln | grep "8902" | wc -l`
#echo "$PORTSTAT_IPYNB" > ~/Desktop/hoge.txt
if [ "$PORTSTAT_IPYNB" -eq "0" ]
  then
    #bash -cl 'ipython notebook / --no-browser --port=8902 & sleep .5' > /dev/null 2>&1  &
    bash -cl 'ipython notebook / --no-browser --port=8902 & sleep .5' > /dev/null 2>&1 
    sleep .5
fi
for f in "$@"
do
  open http://localhost:8902/notebooks"$f"
done

xdg-openopen になってるのは OS X だからです.他には,forループが増えています.それだけです👍 2015/08/30 Automator で作ったアプリから ipython のサーバを起動させるためには,ipython notebook を直接叩くのではなく,bash -cl 'ipython notebook / --no-browser --port=8902 & sleep .5' > /dev/null 2>&1 とせねばならないようです.またif文も間違っていました.これで動いていたような気になっていたのは,すでにサーバが立っている状態で動作を確認していたからです.戸惑わせてしまった方,申し訳ありません.

5. hoge.ipynb とかを適当に選んで右クリック→ Get info で Open with で先ほどのアプリを選びます. info ウィンドウで Change All... を選べばOKです👺👺👺 f:id:buq:20150819215543p:plain

間違いなど発見したらご連絡ください💫

このテクニックはシェルスクリプトOS X上で普通のアプリケーションみたいに動かすために広く使えそう.