0

Je suis nouveau dans le codage, j'ai donc une question concernant Jupyter Notebook et l'utilisation de Javascript. Un extrait de mon code actuel est le suivant (truename est défini avant ce code et pickle.dump est généralement tabulé, mais pas ici en raison de la pile de mise en forme de débordement):Comment exécuter javascript sans nom de fichier


%%javascript 
var kernel = Jupyter.notebook.kernel; 
console.log(kernel); 
var command = "import pickle" + "\n" + "file_name = 'testfile'" + "\n" + "with open(file_name, 'wb') as my_file_obj:" + "\n" + "pickle.dump(trueName,my_file_obj)"; 
kernel.execute(command); 

Cela fonctionne bien, mais pour une raison quelconque lorsque je le place dans le format suivant:

from IPython.core.display import Javascript 
Javascript(""" 
var kernel = Jupyter.notebook.kernel; 
console.log(kernel); 
var command = "import pickle" + "\n" + "file_name = 'testfile'" + "\n" + "with open(file_name, 'wb') as my_file_obj:" + "\n" + " "pickle.dump(trueName,my_file_obj)"; 
kernel.execute(command);""") 

j'obtiens l'erreur suivante même si le code est le même:

Javascript error adding output! SyntaxError: Invalid or unexpected token See your browser Javascript console for more details.


je l'avais espéré utiliser la deuxième méthode pour contourner la barrière de la commande magique en utilisant quelque chose de similaire à !ipython somefile.ipy lire le javascript, mais pour une raison quelconque la deuxième méthode ne vraiment pas var command quelque chose que j'ai découvert après beaucoup de tests. J'ai quelques questions que je serais très heureux si je recevais des commentaires sur:

  1. Pourquoi la deuxième méthode de fournir une erreur due à mon var command? Je ne peux pas comprendre pourquoi cela se produit. (Est-il vrai que je dois utiliser 'textarea'? Si oui, comment je fais cela? Je me suis perdu en essayant de le faire moi-même: How to force a line break on a Javascript concatenated string?)
  2. Y at-il une méthode pour moi pour exécuter Javascript magique quand pas directement dans le cahier? J'ai essayé d'exécuter ipython sur le code dans un fichier séparé avec la fin .ipy comme vu ci-dessus, mais il n'aime pas exécuter la magie de la cellule ni l'importation de IPython.core.display. (Cette méthode ne fonctionne pas pour moi: How to run an IPython magic from a script (or timing a Python script))
  3. Y at-il un moyen pour moi d'exécuter le code Javascript directement (pas via un fichier) lors de l'utilisation d'une fonction telle que def run_javascript(code):? L'exécution d'une cellule dans Jupyter renvoie le code sous l'argument code, mais je ne peux pas savoir comment l'exécuter. J'ai regardé autour mais les seules réponses que j'ai trouvées sont environ !node somefile.js et d'autres codes Javascript basés par nom de fichier semblables. J'apprécierais toute aide! J'ai eu quelques suggestions quant à la façon d'exécuter du code python comme je voudrais, mais depuis IPython ne fonctionne pas avec le Javascript, je suis à une perte (Conseils Python: run a python script in terminal without the python commandExecute python commands passed as strings in command line using python -c)

Répondre

0

Cela devrait fonctionner , lorsque vous utilisez from IPython.core.display import Javascript il s'agit d'une classe qui, une fois évaluée, stocke les données renvoyées dans les étendues et une fois retournées, les données ne sont plus disponibles. Utilisez window.variable pour affecter à un objet de fenêtre pour qu'il soit disponible globalement.

from IPython.core.display import Javascript 
    Javascript(""" 
    var kernel = Jupyter.notebook.kernel; 
    window.variable = kernel; 
    var command = "list"; 
    window.variable = command; 
    console.log(kernel.execute(command));""") 

j'ai eu l'idée d'ici

Understanding namespace when using Javascript from Ipython.core.display in Jupyter Notebook