如何运行没有文件名的{javascript

时间:2017-07-27 18:56:31

标签: javascript ipython jupyter-notebook ipython-notebook jupyter

我是编码的新手,所以我对Jupyter Notebook和Javascript的使用有疑问。我当前代码的片段如下(trueName在此代码之前定义,pickle.dump通常是标签,但由于堆栈溢出的格式化而不在此处:

%%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);

这种方法很好,但出于某种原因我将其放入以下格式:

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);""")

即使代码相同,我也会收到以下错误:

  

添加输出的Javascript错误!   SyntaxError:无效或意外的令牌   有关更多详细信息,请参阅浏览器Javascript控制台。

我原本希望使用第二种方法,以便在使用与!ipython somefile.ipy类似的东西时绕过魔法命令障碍 阅读javascript,但由于某种原因,第二种方法真的不喜欢我在经过多次测试后发现的var command内容。我有几个问题,如果我收到一些反馈,我会非常感激:

  1. 为什么第二种方法因var command而导致错误?我无法弄清楚为什么会发生这种情况。(我是否必须使用'textarea'?如果是这样,我该怎么做?我自己试图这样做时迷路了:How to force a line break on a Javascript concatenated string?
  2. 有没有一种方法让我在不直接在笔记本中运行Javascript魔术?我已经尝试在单独的文件中运行ipython,其中.ipy结尾如上所示,但它不喜欢运行单元魔术,也不喜欢从IPython.core.display导入。 (这种方法对我不起作用:How to run an IPython magic from a script (or timing a Python script)
  3. 使用def run_javascript(code):等功能时,我有办法直接执行Javascript代码(不是通过文件)吗?在Jupyter中执行一个单元格会在参数code下返回代码,但我无法找到如何运行它。我一直在寻找,但我找到的唯一答案是关于!node somefile.js和其他类似的基于文件名的Javascript代码。 我将不胜感激任何帮助!我确实有一些关于如何运行python代码的建议,但是由于IPython无法使用Javascript,我感到很茫然(Python提示:run a python script in terminal without the python command Execute python commands passed as strings in command line using python -c)< / LI>

1 个答案:

答案 0 :(得分:0)

这应该有效,当你使用from IPython.core.display import Javascript时,这是一个类,当被评估时存储在作用域中返回的数据,一旦返回,数据就不再可用了。使用window.variable指定一个窗口对象,使其可以全局使用。

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));""")

我从这里得到了这个想法

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