Ich habe Folgendes, was mit IPython 2.0 funktioniert. Ich habe festgestellt, dass der Name des Notebooks als Wert des Attributs 'data-notebook-name'
im <body>
Tag der Seite gespeichert wird. Daher ist es die erste Idee, Javascript anzufordern, um das Attribut abzurufen - Javascripts können dank der %%javascript
Magie aus einer Codezelle aufgerufen werden. Dann ist es möglich, durch einen Aufruf des Python-Kernels auf die Javascript-Variable mit einem Befehl zuzugreifen, der eine Python-Variable setzt. Da diese letzte Variable aus dem Kernel bekannt ist, kann auf sie auch in anderen Zellen zugegriffen werden.
%%javascript
var kernel = IPython.notebook.kernel;
var body = document.body,
attribs = body.attributes;
var command = "theNotebook = " + "'"+attribs['data-notebook-name'].value+"'";
kernel.execute(command);
Von einem Python-Code Zelle
print(theNotebook)
Out []: HowToGetTheNameOfTheNoteBook.ipynb
Ein Defekt in dieser Lösung ist, dass, wenn man den Titel ändert (Name) eines Notebooks, dann Dieser Name scheint nicht sofort aktualisiert zu werden (es gibt wahrscheinlich eine Art Cache) und es ist notwendig, das Notebook neu zu laden, um Zugriff auf den neuen Namen zu erhalten.
[Bearbeiten] Bei einer Betrachtung ist eine effizientere Lösung, nach dem Eingabefeld für den Namen des Notebooks anstelle des Tags <body>
zu suchen. Wenn Sie in die Quelle schauen, scheint dieses Feld die ID "notebook_name" zu haben. Es ist dann möglich, diesen Wert durch eine document.getElementById()
abzufangen und dann den gleichen Ansatz wie oben zu folgen. Der Code wird, noch die JavaScript-Magie
%%javascript
var kernel = IPython.notebook.kernel;
var thename = window.document.getElementById("notebook_name").innerHTML;
var command = "theNotebook = " + "'"+thename+"'";
kernel.execute(command);
Dann unter Verwendung von einer ipython Zelle,
In [11]: print(theNotebook)
Out [11]: HowToGetTheNameOfTheNoteBookSolBis
Im Gegensatz zu der ersten Lösung, Änderungen des Namen des Notebooks sofort aktualisiert werden und es besteht keine Notwendigkeit zu aktualisieren das Notebook.
Was versuchen Sie damit? Von Grund auf weiß der Kernel (das Bit, das Code ausführt) nichts über das Frontend (das Bit, das Notebooks öffnet). –
Hallo, Ich möchte es mit Nbconvert verwenden, um das Notebook zu Latex/PDF-Erstellungsprozess zu automatisieren. Meine Notebooks laufen remote. Nach dem Unterricht können die Schüler eine PDF-Version ihrer Ergebnisse herunterladen. – Tooblippe