J'ai ce qui suit qui fonctionne avec IPython 2.0. J'ai observé que le nom du carnet de notes est stocké comme la valeur de l'attribut 'data-notebook-name'
dans le <body>
de la page. L'idée est donc d'abord de demander à Javascript de récupérer l'attribut -- les javascripts peuvent être invoqués depuis une cellule de code grâce à la fonction %%javascript
magique. Il est ensuite possible d'accéder à la variable Javascript par un appel au noyau Python, avec une commande qui définit une variable Python. Comme cette dernière variable est connue du noyau, on peut y accéder dans d'autres cellules également.
%%javascript
var kernel = IPython.notebook.kernel;
var body = document.body,
attribs = body.attributes;
var command = "theNotebook = " + "'"+attribs['data-notebook-name'].value+"'";
kernel.execute(command);
A partir d'une cellule de code Python
print(theNotebook)
Out[ ] : HowToGetTheNameOfTheNoteBook.ipynb
Un défaut de cette solution est que lorsqu'on change le titre (nom) d'un cahier, ce nom ne semble pas être mis à jour immédiatement (il y a probablement une sorte de cache) et il est nécessaire de recharger le cahier pour avoir accès au nouveau nom.
[Edit] À la réflexion, une solution plus efficace consiste à rechercher le champ de saisie du nom de l'ordinateur portable au lieu de l'adresse de l'ordinateur. <body>
étiquette. En regardant dans la source, il apparaît que ce champ a pour id "notebook_name". Il est alors possible d'attraper cette valeur par une balise document.getElementById()
puis suivez la même approche que ci-dessus. Le code devient, toujours en utilisant la magie du javascript
%%javascript
var kernel = IPython.notebook.kernel;
var thename = window.document.getElementById("notebook_name").innerHTML;
var command = "theNotebook = " + "'"+thename+"'";
kernel.execute(command);
Puis, à partir d'une cellule ipython,
In [11]: print(theNotebook)
Out [11]: HowToGetTheNameOfTheNoteBookSolBis
Contrairement à la première solution, les modifications du nom du carnet sont mises à jour immédiatement et il n'est pas nécessaire de rafraîchir le carnet.