• python实现jupyter代码的运行


    此写法还有少许的缺陷,有机会再实现改正

    import json
    import re
    
    import requests
    
    token = "1"  # 用户用来登录的token或者是密码
    XSRFToken = "123"
    username = "root"  # 默认的用户名是root
    base = 'http://127.0.0.1:8888'
    
    
    def aa():
        import json
        import datetime
        import uuid
        from websocket import create_connection
    
        # 启动笔记本时,令牌会写入标准输出
        # The token is written on stdout when you start the notebook
        notebook_path = '/home/jupyter/tf2/循环神经网络.ipynb'
    
        headers = {
            'Authorization': 'Token ' + token,
            # "cookie": '_xsrf=123; username-192-168-0-121-3839="2|1:0|10:1653466150|27:username-192-168-0-121-3839|44'
            #           ':YzA1MDZiZTMyMDM2NDNhM2ExYTY1ZTYwNTEwMmI2OGE'
            #           '=|7b1a53cda7ce28931565a57948b8cb13608c830b1625a38c6fb83b8c353cba01" ',
            "cookie": "_xsrf=123",
            "X-XSRFToken": XSRFToken
        }
    
        url = base + '/api/kernels'
        print(url)
        # response = requests.post(url, headers=headers)
        # kernel = json.loads(response.text)
        # print(kernel)
    
        response = requests.post(url, headers=headers)
        print(response.text)
        kernel = json.loads(response.text)
        # 加载笔记本并获取每个单元格的代码
        # Load the notebook and get the code of each cell
        print(kernel)
        url = base + '/api/contents' + notebook_path
        print(url)
        response = requests.get(url, headers=headers)
        file = json.loads(response.text)
        code = [c['source'] for c in file['content']['cells'] if len(c['source']) > 0]
        # print(code)
    
        print(kernel["id"])
        # 执行请求/回复在 websockets 通道上完成
        # Execution request/reply is done on websockets channels
        ws = create_connection("ws://127.0.0.1:3839/api/kernels/" + kernel["id"] + "/channels", header=headers)
        print("*******************")
        print(ws)
    
        def send_execute_request(code):
            msg_type = 'execute_request'
            content = {'code': code, 'silent': False}
            # print("uuid:", uuid.uuid1().hex)
            hdr = {'msg_id': uuid.uuid1().hex,
                   'username': 'test',
                   'session': uuid.uuid1().hex,
                   'data': datetime.datetime.now().isoformat(),
                   'msg_type': msg_type,
                   'version': '5.0'}
            msg = {'header': hdr, 'parent_header': hdr,
                   'metadata': {},
                   'content': content}
            return msg
    
        for c in code:
            # print(json.dumps(send_execute_request(c)))
            ws.send(json.dumps(send_execute_request(c)))
    
        # We ignore all the other messages, we just get the code execution output
        # 我们忽略所有其他消息,我们只得到代码执行输出
        # (this needs to be improved for production to take into account errors, large cell output, images, etc.)
        # (这需要在生产中进行改进,以考虑错误、大电池输出、图像等)
        print(len(code))
        fileCon = bb()
        for i in range(0, len(code)):
            status = ""
            while True:
                con = json.loads(ws.recv())
                print(con)
                # 代表程序开始运行
                if con["msg_type"] == "execute_input":
                    print(con["content"].get("execution_count"))
                    execution_count = con["content"].get("execution_count")
                    if execution_count is not None:
                        fileCon["cells"][i]["execution_count"] = con["content"].get("execution_count")
                # 代表程序运行结束
                if con["msg_type"] == "execute_reply":
                    print(con["content"].get("status"))
                    if con["content"].get("status") == "ok":
                        print(con["content"].get("status"))
                        break
                    elif con["content"].get("status") != "error":
                        # 如果不等于ok得时候,退出双层循环 status="aborted"
                        print("************")
                        status = con["content"].get("status")
                        break
                    else:
                        data = {"ename": con["content"]["ename"], "evalue": con["content"]["evalue"],
                                "output_type": con["content"]["status"], "traceback": [con["content"]["traceback"]]}
                        fileCon["cells"][i]["outputs"].append(data)
                        break
                # 当内核重启时,结束运行
                if con["msg_type"] == "status":  # restarting
                    if con["content"].get("execution_state") == "restarting":
                        status = con["content"].get("execution_state")
                        break
                # 返回程序得运行结果
                if con["msg_type"] == "stream":
                    obj = {"name": con["content"]["name"], "output_type": con["msg_type"],
                           "text": [con["content"]["text"].strip().strip("\b").strip("\r").strip()]}
                    fileCon["cells"][i]["outputs"].append(obj)
                    # print(con["content"]["text"])
                # 返回程序得运行结果 图片之类的
                if con["msg_type"] == "display_data":
                    data = {"metadata": con["metadata"], "data": {"text/plain": [con["content"]["data"]["text/plain"]],
                                                                  "image/png": con["content"]["data"]["image/png"]},
                            "output_type": con["msg_type"]}
                    fileCon["cells"][i]["outputs"].append(data)
            if status != "":
                break
            # msg_type = ''
            # while msg_type != "stream":
            #     rsp = json.loads(ws.recv())
            #     msg_type = rsp["msg_type"]
            # print(rsp["content"]["text"])
            # # rsp = json.loads(ws.recv())
            # # print(rsp)
        ws.close()
        dd(json.dumps(fileCon))
    
    
    # 读取文件中得内容
    def bb():
        # 以 utf-8 的编码格式打开指定文件
        f = open("入门神经网络.ipynb", 'r', encoding="utf-8")
        # 输出读取到的数据
        # print(f.read())
        cc = json.loads(f.read())
        print(cc["cells"])
        print(len(cc["cells"]))
        # 关闭文件
        f.close()
        return cc
    
    
    # 向文件中写内容
    def dd(con):
        with open("入门神经网络_运行.ipynb", "w", encoding="utf-8") as f:
            f.write(con)
            print("写入成功!")
    
    
    if __name__ == '__main__':
        aa()
  • 相关阅读:
    20150629_Andriod_06_插入_删除_弹出式操作数据
    20150626_Andriod_02_ListView2_列表与详细信息
    Andriod 字符串数组里加入字符串元素
    20150625_Andriod_02_ListView2_多条目显示_选中
    20150625_Andriod_01_ListView1_条目选中
    Android开发中完全退出程序的三种方法
    Python中的单例模式的几种实现方式的及优化
    jdk与jre
    页面跳转
    用for循环创建对象
  • 原文地址:https://www.cnblogs.com/lxz123/p/16352485.html
Copyright © 2020-2023  润新知