2

いくつかのシェルコマンドとその入力を含むIPythonノートブックをまとめたいと思います。IPython(ノート)シェルコマンドにインライン入力を提供するにはどうすればよいですか?

bash-3.2$ mysql -u root <<END_IPUT 
> use mydb; 
> show tables; 
> END_INPUT 
私はIPythonで同じ効果を得るにはどうすればよい

、特にjupyterノートで:bashプロンプトで、私は「ヒアドキュメント」構文を使用することができますか?私はいくつかの構文上の細かな点を有効にする方法を示し、「ライン魔法」または「セル 魔法」、例えば:

In [7]: !! ls -tF 
Out[7]: ['Demo-notebook.ipynb', 
      'createdb.sql', 
      ... 

私はIPython as a system shellで見てきた、とIPythonとしてシェルコマンドを実行する方法を知っています。以下の後、私は!または

# Turn everything in $PATH into an alias; 
# then enable calling aliases without ! or % 
%rehashx  
%autocall 2 

!!を付加することなく、システムコマンドを実行することができます。しかしこれのどれも、これらのコマンドをインラインに入力を提供するのに役立ちますしない:パイソンSyntaxErrorにヒアドキュメント構文はIPythonでは無効であり、その結果。それで私はどうしますか?

+0

bashセルの魔法を試しましたか? '%% bash'という行でセルを開始し、残りの部分にbashコードを入れます。 –

+1

良い提案、ありがとう!私はすでに '%% sx'を見つけました。これは私の考えと同じことです。しかし、 '%bash'のドキュメンテーションは、私が探していた' %% script'をもたらしました。その間、私は特にsqlのための拡張を発見しました。これは私の直面する問題をより良く解決しました。しかし、あなたの提案に応じて答えを広げたいと思ったら、私はそれを受け入れます。 – alexis

+0

@トーマス、あなたが3回目に自分のタグを削除する前に、それぞれの人に何人いるかを見てください。 [tag:ipython-notebook]に問題がある場合は、タグをマージするようにプロセスを進めてください。 – alexis

答えて

3

bashセルのマジックでは、複数行のbashを入力できます。ただ、%%bashで任意のセルを開始します。

%%bash 
echo "This is bash" 
ls 

あなたが別のプログラムにパイプテキストにヒアドキュメントを使用している場合、あなたはまた、スクリプトセル魔法使用することができます。

%%script bc 
2+3 

を、他の細胞があるかもしれませんより具体的にあなたの問題に対処する魔法!

4

さらに詳しい研究と、@ ThomasKのヒント(受け入れられた回答を参照)の助けを借りて、これを行う方法がいくつか見つかりました。

  • 一つの解決策は、%sx魔法の細胞です。セルの内容をbashスクリプトとして実行し、出力をキャプチャして行のリストとして返します。ときには便利な、時にはない。

    In[1]: %%sx 
         echo Hello, world 
         cat -n <<DATA 
         this 
         and that 
         DATA 
    
    Out[1]: ['Hello, world', '  1\tthis', '  2\tand that'] 
    
  • %%bashへの変更、@ThomasKが提案され、出力がプリントアウトされ、返さないと。それ以上の処理のためにキャプチャするために、ipython--outパラメータを提供します。しかし、私はそれを自分で印刷する必要があります。デフォルトでは表示されません。

    In[1]: %%bash --out var 
         echo Hello, world 
         echo " Again" 
    
    In[2]: var 
    
    Out[2]: 'Hello, world\n Again\n' 
    
  • %%bash実際%%script bashの略記である、(%%script?のヘルプを参照してください)「スクリプトで#!ラインのように」作業として請求。それは何か。ここでは、このドキュメントの構文を省略して、どのプログラムでもセルの内容を入力として読み取らせる方法があります。 %%scriptは、--outパラメータも受け入れます。

     %%script --out var mysql -u root -p XYZ 
         USE somedb; 
         SELECT * FROM users 
          WHERE passwd IS NULL\G 
    

これは十分にいいですが、私のユースケースがmysqlあるので、私はそれを使用していないことになった、そして最終的に私は、私が代わりに使用することができます偉大なサードパーティipython-sql拡張子があることを発見:

%load_ext sql 
%sql mysql+pymysql://user:[email protected]/somedb 

これは、拡張子のインストールには、pip install ipython-sqlを前提としています。 mysqlについては、pip install pymysqlも必要でした。上記設定後、私は実際にちょっといいですボーダーとノートブックテーブルとしてを描かれている。この

In[1]: %%sql 
     SELECT * FROM users 
      WHERE passwd IS NULL 

Out[1]: 1 rows affected. 
     ... 

返されるテーブルのようなデータベースに話します。そしてそれは私が_からつかむことができるパンダのデータフレーム(スマートリスト)として利用可能になりました。

+0

コマンド行で 'notebook.py'をエクスポートするために' %% bash/usr/bin/env ipython'を実行できますか? – jtlz2

関連する問題