Ho il seguente che funziona con IPython 2.0. Ho osservato che il nome del notebook è memorizzato come valore dell'attributo 'data-notebook-name'
nel tag <body>
della pagina. Quindi l'idea è prima di chiedere a Javascript di recuperare l'attributo - i javascript possono essere richiamati da un codecell grazie alla magia %%javascript
. Quindi è possibile accedere alla variabile Javascript attraverso una chiamata al kernel Python, con un comando che imposta una variabile Python. Poiché quest'ultima variabile è nota dal kernel, è possibile accedervi anche in altre celle.
%%javascript
var kernel = IPython.notebook.kernel;
var body = document.body,
attribs = body.attributes;
var command = "theNotebook = " + "'"+attribs['data-notebook-name'].value+"'";
kernel.execute(command);
Da una cella di codice Python
print(theNotebook)
Out []: HowToGetTheNameOfTheNoteBook.ipynb
Un difetto in questa soluzione è che quando si cambia il titolo (nome) di un notebook, poi questo nome sembra non essere aggiornato immediatamente (probabilmente c'è un qualche tipo di cache) ed è necessario ricaricare il notebook per ottenere l'accesso al nuovo nome.
[Modifica] Riflettendo, una soluzione più efficiente è cercare il campo di input per il nome del notebook anziché il tag <body>
. Esaminando la fonte, sembra che questo campo abbia id "nome_tabella". È quindi possibile prendere questo valore con un document.getElementById()
e quindi seguire lo stesso approccio come sopra. Il codice diventa, ancora utilizzando il JavaScript magia
%%javascript
var kernel = IPython.notebook.kernel;
var thename = window.document.getElementById("notebook_name").innerHTML;
var command = "theNotebook = " + "'"+thename+"'";
kernel.execute(command);
Poi, da una cella ipython,
In [11]: print(theNotebook)
Out [11]: HowToGetTheNameOfTheNoteBookSolBis
Contrariamente alla prima soluzione, modifiche del nome del notebook vengono aggiornati immediatamente e non v'è alcuna necessità di aggiornare il notebook.
Che cosa stai cercando di fare con esso? In base alla progettazione, il kernel (il bit che esegue il codice) non conosce il frontend (il bit che apre i blocchi appunti). –
Ciao, voglio usarlo con nbconvert per automatizzare il processo di creazione del notebook in latex/pdf. I miei taccuini funzionano da remoto. dopo una lezione gli studenti possono scaricare una versione pdf dei loro risultati. – Tooblippe