2015-08-04 12 views
6

È possibile scrivere un blocco appunti Jupyter in modo che i parametri possano essere trasferiti tramite l'URL del notebook?Un notebook Jupyter/IPython può accettare argomenti nell'URL?

Esempio, per un URL come questo:

http://jupyter.example.com/user/me/notebooks/notebook1.ipynb?Variable1=Value1&Variable2=Value2 

come poteva accedere Variable1 e Variable2 all'interno della cellula Jupyter?

risposta

7

è necessario trovare l'URL utilizzando JavaScript e passarlo al kernel IPython:

from IPython.display import HTML 
HTML(''' 
    <script type="text/javascript> 
     IPython.notebook.kernel.execute("URL = ' + window.location + "'") 
    </script>''') 

o:

%%javascript 
IPython.notebook.kernel.execute("URL = '" + window.location + "'"); 

Poi nella cella accanto:

print(URL) 

Dopo questo è possibile utilizzare gli strumenti nella libreria standard (o operazioni di stringa semplice) per estrarre i parametri di query.

+0

ho segnato questa domanda come risposta prima ho provato. Sto lottando per farlo funzionare. Vedi http://stackoverflow.com/q/37172978/1698426. –

+0

Ho lavorato con una doppia citazione aggiuntiva: IPython.notebook.kernel.execute ("URL = '" + window.location + "'"); – jdregister

+0

@jdregister grazie per la correzione. – akaihola

2

È sufficiente prendere i valori con javascript e trasferirli sul kernel ipython come nel collegamento di John Schmitt.

cellulare [1]:

%%javascript 
function getQueryStringValue (key) 
{ 
    return unescape(window.location.search.replace(new RegExp("^(?:.*[&\\?]" + escape(key).replace(/[\.\+\*]/g, "\\$&") + "(?:\\=([^&]*))?)?.*$", "i"), "$1")); 
} 
IPython.notebook.kernel.execute("Var1='".concat(getQueryStringValue("Variable1")).concat("'")); 
IPython.notebook.kernel.execute("Var2='".concat(getQueryStringValue("Variable2")).concat("'")); 

E in un'altra cella è possibile recuperare le variabili Python chiamato Var1 e Var2:

>>>print Var1 
Value1 

E:

>>>print Var2 
Value2 
Problemi correlati