2016-07-27 10 views
2

Im IPython Notebook ausführen, können Sie eine externe Skript ausführen können, sagen test.py, den Lauf Magie:IPython Notebook Zelle aus Python-Skript

%run test.py 

Gibt es eine Möglichkeit, das Gegenteil zu tun, das heißt ein IPython gegeben Notebook, Zugriff auf und dann Ausführen einer bestimmten Zelle in ihm aus einem Python-Skript?

+0

IPython hat ein Format wie XML. Sie können es analysieren und die gewünschte Zelle ausführen. –

+0

Ich weiß, aber wie? – Alex

+0

Irgendwelche Hilfe bitte? – Alex

Antwort

2

Die Datei mit der Erweiterung "ipynb" von Jupyter (oder IPython) ist eine JSON-Datei. Und die Zellen sind unter dem Namen "Zellen" ["Zellen"]. Dann wählen Sie die Nummer der Zelle [0] und um die Quelle zu erhalten, wählen Sie "Quelle" ["Quelle"]. Dafür bekommst du ein Array mit einem Element, also musst du das erste Element [0] holen.

>>> import json 
>>> from pprint import pprint 
>>> with open('so1.ipynb', 'r') as content_file: 
...  content = content_file.read() 
... 
>>> data=json.loads(content) 
>>> data["cells"][0]["source"][0] 
'1+1' 
>>> eval(data["cells"][0]["source"][0]) 
2 
>>> data["cells"][1]["source"][0] 
'2+2' 
>>> eval(data["cells"][1]["source"][0]) 
4 

EDIT:

andere Python-Skripte in Zellen ausführen zu können,% Lauf haben:

os.system(data["cells"][2]["source"][0].replace("%run ","")) 

Oder sie mit folgendem ersetzen, wenn Sie Option -i haben:

execfile(data["cells"][2]["source"][0].replace("%run -i ","")) 

Weitere Informationen finden Sie unter Run a python script from another python script, passing in args.

+0

Danke. Gibt es irgendetwas, was ich tun könnte, wenn ich sagen würde, dass die Zelle eine jupyter/ipython-spezifische Magie enthält, wie zum Beispiel% run? – Alex

+0

Ich habe die Antwort bearbeitet. –