En modifiant la méthode @jfb, on obtient la fonction ci-dessous qui fonctionne bien sur ipykernel-5.3.4.
def getNotebookName():
display(Javascript('IPython.notebook.kernel.execute("NotebookName = " + "\'"+window.document.getElementById("notebook_name").innerHTML+"\'");'))
try:
_ = type(NotebookName)
return NotebookName
except:
return None
Nota que le javascript d'affichage prendra un certain temps pour atteindre le navigateur, et qu'il faudra un certain temps pour exécuter le JS et revenir au noyau. Je sais que cela peut paraître stupide, mais il est préférable d'exécuter la fonction en deux cellules, comme ceci :
nb_name = getNotebookName()
et dans la cellule suivante :
for i in range(10):
nb_name = getNotebookName()
if nb_name is not None:
break
Cependant, si vous n'avez pas besoin de définir une fonction, la méthode la plus sage est d'exécuter display(Javascript(..))
dans une cellule, et vérifier le nom du cahier dans une autre cellule. De cette façon, le navigateur a suffisamment de temps pour exécuter le code et renvoyer le nom du cahier.
Si l'utilisation d'une bibliothèque ne vous dérange pas, la méthode la plus robuste est la suivante :
import ipynbname
nb_name = ipynbname.name()