2016-07-09 6 views
2

Ich programmiere eine Python-Benutzeroberfläche, um verschiedene Instrumente in einem Labor zu steuern. Wenn ein Skript nicht interaktiv ausgeführt wird, geht die Verbindung mit den Instrumenten am Ende des Skripts verloren, was sehr schlimm sein kann. Ich möchte dem Benutzer helfen, sich daran zu erinnern, das Skript interaktiv auszuführen.IPython run magic: Wie erstelle ich einen Alias ​​für "run -i"?

Ich denke an zwei mögliche Wege, es zu tun. Zuerst wird in dem Titel wie angegeben, kann ich eine Alias ​​für run -i machen:

%alias_magic lab_run run -i 

aber dies gibt einen Fehler zurück:

UsageError: unrecognized arguments: -i 

Gibt es eine Möglichkeit, dies zu umgehen?

Alternativ könnte ich innerhalb des Skripts erkennen, wenn das -i Flag weitergegeben wurde und erhöhen Sie en Fehler wenn nicht. Allerdings zeigt es nicht in der Liste nach oben sys.argv: als

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

ich nicht ipy Dateien verwenden kann, weil ich% Lauf-Flags lesen muß, hier in meiner vorherigen Frage erklärt: How to add a custom flag to IPython's magic commands? (.ipy files)

Wer sieht eine Lösung für dieses Problem?

from IPython.core.magic import register_line_magic 

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

del r 

EDIT

Wie hpaulj magic weist darauf hin, veraltet:

+0

'-i' von'% run' analysiert wird, und ist nicht in den Extras, die es geht auf Ihr Skript als 'sys.argv'. – hpaulj

+0

Sieht aus wie '% alias_magic' keine Argumente, nur die 2 Zeichenfolgen. – hpaulj

Antwort

3

Sie können Ihre eigene Magie-Funktion und verwenden %run -i darin definieren. Hier ist eine Version mit dem neuen 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 

macht das gleiche wie:

%run -i 
+0

Das ist großartig. – Laurent

+1

Großartig, dass es geholfen hat. Übrigens, Sie haben das Privileg [upvote] (http://stackoverflow.com/help/privileges/vote-up). ;) –

+0

Laut seiner Dokumentation ist diese "Magie" veraltet. Es wird stattdessen 'ip.run_line_magic (magic_name, line)' empfohlen. – hpaulj

Verwandte Themen