2016-07-09 16 views
2

私は実験室でさまざまな計測器を制御するためのPythonユーザーインターフェイスをプログラミングしています。スクリプトが対話形式で実行されないと、スクリプトの最後で計測器との接続が失われてしまい、非常に問題が発生する可能性があります。私は対話的にスクリプトを実行することをユーザーが「覚えている」ように助けたい。IPython run magic: "run -i"のエイリアスを作成するには?

私は2つの可能な方法を考えています。まず、タイトルに指定されているように、私はrun -iのエイリアスを作ることができる:

%alias_magic lab_run run -i 

が、これはエラーを返します:

UsageError: unrecognized arguments: -i 

は、これを回避する方法はありますか?

また、-iフラグが渡され、そうでない場合はraiseエラーが発生した場合、スクリプト内で検出できました。ここで私の前の質問で説明したように、私は、%の実行フラグを読み取る必要があるため

In [1]: import sys 
In [2]: run -i test.py random args 
['test.py', 'random', 'args'] 

は、私は、IPYファイルを使用することはできません:しかし、それはsys.argvリストに表示されません How to add a custom flag to IPython's magic commands? (.ipy files)

誰でもこの問題の解決策を見ていますか?

+0

'-i'%のrun''によって解析され、それがに渡すエキストラではありませんされてあなたのスクリプトは 'sys.argv'です。 – hpaulj

+0

'%alias_magic'は引数を取らないように見えますが、2つの文字列だけです。 – hpaulj

答えて

3

独自の魔法の関数を定義し、それに%run -iを使用することができます。

from IPython.core.magic import register_line_magic 

@register_line_magic 
def r(line): 
    get_ipython().magic('run -i ' + line) 

del r 

EDIT

hpauljがmagicが廃止されて指摘しているように。ここでは新しい run_line_magicとバージョン:

from IPython.core.magic import register_line_magic 

@register_line_magic 
def r(line): 
    get_ipython().run_line_magic('run', ' -i ' + line) 

del r 
Now: 

%r 

は同じ行います

%run -i 
+0

これは素晴らしいです。 – Laurent

+1

それは助けてよかった。ところで、あなたは[upvote](http://stackoverflow.com/help/privileges/vote-up)の特権を持っています。 ;) –

+0

ドキュメントによれば、この「魔法」は推奨されていません。代わりに 'ip.run_line_magic(magic_name、line)'を推奨しています。 – hpaulj