Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取整个Jupyter笔记本的当前内容_Python_Jupyter Notebook - Fatal编程技术网

Python 获取整个Jupyter笔记本的当前内容

Python 获取整个Jupyter笔记本的当前内容,python,jupyter-notebook,Python,Jupyter Notebook,我有一个Jupyter笔记本在运行。我希望能够从Python中访问当前Jupyter笔记本的源代码。我的最终目标是将其传递到ast.parse,以便对用户的代码进行分析。理想情况下,我可以这样做: import ast ast.parse(get_notebooks_code()) 显然,如果源代码是一个IPYNB文件,那么就有一个从Python单元提取代码的中间步骤,但这是一个相对容易解决的问题 到目前为止,我发现了一些代码,它们将使用IPython对象的list\u running\u s

我有一个Jupyter笔记本在运行。我希望能够从Python中访问当前Jupyter笔记本的源代码。我的最终目标是将其传递到
ast.parse
,以便对用户的代码进行分析。理想情况下,我可以这样做:

import ast
ast.parse(get_notebooks_code())
显然,如果源代码是一个IPYNB文件,那么就有一个从Python单元提取代码的中间步骤,但这是一个相对容易解决的问题

到目前为止,我发现了一些代码,它们将使用IPython对象的
list\u running\u servers
函数来发出请求并匹配内核ID,这将为我提供当前运行的笔记本的文件名。这是可行的,除了磁盘上的源代码可能与用户在浏览器中的源代码不匹配(直到保存新的检查点)

我见过一些使用JavaScript提取数据的想法,但这需要一个单独的单元格,或者调用display.JavaScript函数,该函数异步启动,因此不允许我将结果传递给
ast.parse


对于如何在Python中以字符串形式动态获取当前笔记本的源代码以供即时处理,有谁有什么聪明的想法吗?如果我需要将其作为一个扩展,甚至是一个内核包装器,我很好,我只需要以某种方式获取源代码。

好吧,这不是我想要的,但这是我当前的策略。我需要运行一些基于用户代码的Python代码,但实际上不必直接连接到用户代码。因此,我将在之后运行以下魔术:

%%javascript
// Get source code from cells
var source_code = Jupyter.notebook.get_cells().map(function(cell) {
    if (cell.cell_type == "code") {
        var source = cell.code_mirror.getValue();
        if (!source.startsWith("%%javascript")) {
            return source;
        }
    }
}).join("\n");
// Embed the code as a Python string literal.
source_code = JSON.stringify(source_code);
var instructor_code = "student_code="+source_code;
instructor_code += "\nimport ast\nprint(ast.dump(ast.parse(student_code)))\nprint('Great')"
// Run the Python code along with additional code I wanted.
var kernel = IPython.notebook.kernel;
var t = kernel.execute(instructor_code, { 'iopub' : {'output' : function(x) {
    if (x.msg_type == "error") {
        console.error(x.content);
        element.text(x.content.ename+": "+x.content.evalue+"\n"+x.content.traceback.join("\n"))
    } else {
        element.html(x.content.text.replace(/\n/g, "<br>"));
        console.log(x);
    }
}}});
%%javascript
//从单元格中获取源代码
var source_code=Jupyter.notebook.get_cells().map(函数(单元格){
if(cell.cell_type==“code”){
var source=cell.code_mirror.getValue();
如果(!source.startsWith(“%%javascript”)){
返回源;
}
}
}).加入(“\n”);
//将代码作为Python字符串文本嵌入。
source_code=JSON.stringify(源代码);
var讲师代码=“学生代码=”+源代码;
讲师代码+=“\nimport ast\nprint(ast.dump(ast.parse(学生代码)))\nprint('Great')”
//运行Python代码以及我想要的其他代码。
var kernel=IPython.notebook.kernel;
var t=kernel.execute(代码,{'iopub':{'output':函数(x){
如果(x.msg_type==“error”){
控制台错误(x.content);
element.text(x.content.ename+“:“+x.content.evalue+”\n“+x.content.traceback.join(“\n”))
}否则{
html(x.content.text.replace(/\n/g,“
”); 控制台日志(x); } }}});
我同意,如果在Python中有一些东西与Jupyter/IPython本机关联,那就太好了。具有类似于jupyter.notebook.dumps()的界面的东西。。我也还没找到。