2016-07-05 6 views
1

IPythonのmagicコマンドにカスタムフラグを追加することはできますか?具体的には、私は手作りのフラグで%runコマンドを使用します:IPythonのマジックコマンドにカスタムフラグを追加するには? (.ipyファイル)

%run script.ipy --flag "option" 

スクリプト内で "オプション"を使用できるようにします。 .pyファイルの場合

は、その答えはここに用意されていますCommand Line Arguments In Python

+2

これを試しましたか?何がうまくいかなかったのですか? –

+0

構文は機能しますが、スクリプトのフラグにアクセスする方法はわかりません。 – Laurent

+0

リンクされた質問で提供されているアプローチ(例えば、 'argparse')のいずれかを使うか、' import sys; sys.argv'を直接(それはリストです) –

答えて

0

コメントで示されているように、この質問は、Pythonスクリプトにコマンドライン引数を処理についてだけではありません。それは%runで実行される.ipyファイルで処理することです。

私は

import sys 
print(sys.argv) 

として test.ipyを作成し、シェルからそれを実行した場合、私はコマンドライン引数を参照してください。

1223:~/mypy$ python3 test.ipy -test foo 
['test.ipy', '-test', 'foo'] 

しかしipythonセッションから、私はしないでください

In [464]: %run test.ipy --flag test 
['/usr/bin/ipython3'] 

pyという名前でコピーを作成する場合

In [468]: %run testipy.py --flag test 
['testipy.py', '--flag', 'test'] 

したがって、%run ...ipyの動作は異なります。これは一般的なPythonのコマンドラインではなく、ipythonの問題です。

================

%runドキュメントは、この点を持っている

テキストは上記しないための特別の使用量がありますapply: ファイル名が.ipy [nb]で終わる場合、ファイルはIPythonプロンプトにコマンドが記述されているかのように、ipythonスクリプト として実行されます。その場合

私が入力したときに、私がそうであるように、test.ipyスクリプトは同じsys.argvを見ている:

In [475]: sys.argv 
Out[475]: ['/usr/bin/ipython3'] 

私はこのような文字列のカップルを追加することなどによって、現在のセッションでsys.argvを変更するのであれば:

In [476]: sys.argv += ['--flag','test'] 

In [477]: sys.argv 
Out[477]: ['/usr/bin/ipython3', '--flag', 'test'] 

In [479]: %run test.ipy 
['/usr/bin/ipython3', '--flag', 'test'] 

私のipyスクリプトで表示されるようになりました。

これは答えです。コマンドライン引数をsys.argvに入れてから、%run ...ipyを使用してください。

(私は​​と高度なことをやったときにsys.argvをいじるのこの種をやった。)ipythonマジック

In [480]: %run?? 

が私にそのドキュメントとコードの両方を示して

より。したがって、私はそれが特別なファイル.ipyをどのように扱っているか見ることができます。見つけやすいので、ここではコピーしないでください。

別の解決策があります - ipyファイルでコマンドラインスタイルのコーディングを使用しないでください。

私はそのテストファイルに

print(x) 

の行を追加し、私のIpythonセッションで定義されたxを持っている場合、私はその印刷を参照してください。しかし、同じ印刷物を.pyに入れて、私はNameerrorを手に入れます。彼らが入力したかのようにipyが実行されていると言うとき、それはそれを意味します。実際には、ipyを実行することは、クリップボードからの%pasteの代替です。

+0

多くの場合、興味深く役立つが、私の場合はそれができない。 "test"は任意の文字列でなければなりません(ユーザーがコメントを追加する方法として機能します)。また、私はmagicコマンドを呼び出しているので、.ipyファイルを使用する必要があります。 – Laurent

+0

もっと具体的な例が必要な場合があります。 'main'ネームスペースと' ipy'sの関係は何ですか?おそらく、 '%run'は正しいツールではありません。 – hpaulj

+0

あなたはどんな魔法を使っていますか?現在の名前空間にアクセスする '%hist'のようなもの?または '%ls'はstandalongの' ipython'セッションで実行できますか? – hpaulj

関連する問題