vitalgg 发表于 2025-5-19 10:28:43

混合编程-- 操作 json数据 autolisp&(python/nodejs)

本帖最后由 vitalgg 于 2025-5-20 15:30 编辑

#+title:混合编程操作json数据

* 背景

JSON数据格式已成为大多数编程语言的内置的数据格式。它可以方便地在所使用的语言中的对象及数据和字符串之间进行转化。

autolisp本身没有对象。但是有点对表,列表。这种格式与json非常相似。但是Autolisp中的整数和浮点数精度及范围有限,在相互转化时数值类型的数据会失真。

为了保持数据的一致性。我们可以调用外部程序进行处理,如python。

windows下的大多数CAD支持visuallisp,现在就用 winhttp.httprequest 做为中介让autolisp与python进行交互编程。

* 服务端
** python 版本
jsonserver.py 内容:
#+begin_src python

    from flask importFlask,jsonify,request
    import json
    jsonobj = {};
    app = Flask(__name__)
    @app.route('/api/json',methods=['GET'])
    def get_json():
      global jsonobj
      return json.dumps(jsonobj)

    @app.route('/api/json',methods=['POST'])
    def init_json():
      global jsonobj
      jsonobj = request.json;
   
      return json.dumps(jsonobj)

    @app.route('/api/json_set',methods=['POST'])
    def set_json():
      global jsonobj
      data = request.json;
      for key in data:
            jsonobj = data
      return json.dumps(jsonobj)

    if __name__ == '__main__':
      app.run(debug=True)


#+end_src

安装python及需要的包
#+begin_src shell
winget install python.python.3.13
pip install flask
#+end_src

运行服务端
#+begin_src shell
python jsonserver.py
#+end_src

** nodejs 版本

const http = require('http');
// const url = require("url");
const port = 5000;

let jsonobj = {};

http.createServer((req, res) => {
    const {url ,method} = req;
   
    res.statusCode = 200,
    res.setHeader('Content-Type', 'text/plain;charset=utf-8');
    if( req.url === '/api/json' && req.method === 'GET') {
      toGet(req, res);
    }else if( req.url === '/api/json' && req.method === 'POST') {
      toPost(req, res);
    }else if( req.url === '/api/json_set' && req.method === 'POST') {
      toSetPost(req, res);
    }
   
}).listen(port, () => {
    console.log(`Server listening on: http://localhost:${port}`);
});

//获取GET请求内容
function toGet(req, res){
    res.end(JSON.stringify(jsonobj));
    console.log(JSON.stringify(jsonobj));
}

//获取POST请求内容、cookie
function toPost(req, res){
    let data = '';
    req.on('data', function(chunk){   
      data += chunk;
    });
    req.on('end', function(){   
jsonobj = JSON.parse(data);
      res.end(JSON.stringify(jsonobj));
      console.log(jsonobj);
    });
}
function toSetPost (req, res){
    let data = '';
    req.on('data', function(chunk){   
      data += chunk;
    });
    req.on('end', function(){   
reqdata = JSON.parse(data);
for(var key in reqdata){
      jsonobj=reqdata;
};
      res.end(JSON.stringify(jsonobj));
    });
}


* 客户端

@lisp 内置了 http 交互函数,可以用 @::@get , @::postjson 与服务端进行交互。
没有安装 @lisp的可以执行以下代码,网络加载需要的函数。
(progn(vl-load-com)(setq s strcat h"http"o(vlax-create-object (s"win"h".win"h"request.5.1"))v vlax-invoke e eval r read)(v o'open "get" (s h"://""atlisp.""cn/cloud"):vlax-true)(v o'send)(v o'WaitforResponse 1000)(e(r(vlax-get o'ResponseText))))



默认端口是5000,你也可以修改,只要保证服务端与客户端一致就可以了。

** 初始化json对象

#+begin_src lisp

(@::postjson "http://localhost:5000/api/json" "{\"k1\":\"v1\",\"k2\":\"v2\",\"k3\":\"v3\"}")

设置键值

(@::postjson "http://localhost:5000/api/json_set" "{\"k1\":\"aaa\"}")

取 json,当然上面的设置后也会直接返回结果

(@::@get "http://localhost:5000/api/json")


原文:https://gitee.com/atlisp/atlisp- ... 8D%E4%BD%9Cjson.org

dcl1214 发表于 2025-5-20 09:38:10

我们好像搞过一次python,发现对系统依赖太严格了,比如说vcruntime等等,我们客户现场有WEN7WEN8WEN10WEN11含ghost系统,最后,我们放弃了python,选择go,go是自给自足的,对系统依赖极低

vitalgg 发表于 2025-5-22 10:10:11

moshouhot 发表于 2025-5-22 08:33
AI对这种模式熟悉吗?有尝试AI来编写相关代码吗?有没有相关提示词来解释这种模式?

这种模式只是通过http进行数据通信。可以是本地服务,也可以是网络服务。
ActiveX是通过COM+. 本地服务类似COM+, 网络服务类似DCOM

然后就可以发挥各语言的优势了。把lisp也变成胶水。

vitalgg 发表于 2025-5-19 12:00:22

CAD命令行不能输入太长的字符串,我们写成 lsp文件。



加载:(load "test/json")

初始化 json 字串为 json对象
(@::postjson "http://localhost:5000/api/json" jsonstr)



设置某个键值。如Ttile , WedmType

(@::postjson "http://localhost:5000/api/json_set" "{\"Title\":\"ABCD\", \"WedmType\":2}")



提交的键值替换成了新值。并且长整数能保持原值。


你有种再说一遍 发表于 2025-5-19 15:53:53

有点复杂,简单应该是vlisp调用vb的json

vitalgg 发表于 2025-5-19 16:17:51

本帖最后由 vitalgg 于 2025-5-19 16:21 编辑

大量的 python 库在等你。
torch , opencv, numpy, vllm


Package                                  Version
---------------------------------------- ---------------------------
aiohappyeyeballs                         2.6.1
aiohttp                                  3.11.18
aiosignal                              1.3.2
airportsdata                           20250224
annotated-types                        0.7.0
anyio                                    4.9.0
astor                                    0.8.1
attrs                                    25.3.0
blake3                                 1.0.4
cachetools                               5.5.2
certifi                                  2025.4.26
charset-normalizer                     3.4.2
click                                    8.2.0
cloudpickle                              3.1.1
cmake                                    4.0.2
compressed-tensors                     0.9.4
datasets                                 3.6.0
Deprecated                               1.2.18
depyf                                    0.18.0
dill                                     0.3.8
diskcache                              5.6.3
distro                                 1.9.0
dnspython                              2.7.0
einops                                 0.8.1
email_validator                        2.2.0
fastapi                                  0.115.12
fastapi-cli                              0.0.7
filelock                                 3.18.0
frozenlist                               1.6.0
fsspec                                 2025.3.0
gguf                                     0.16.3
googleapis-common-protos               1.70.0
grpcio                                 1.71.0
h11                                    0.16.0
hf-xet                                 1.1.1
httpcore                                 1.0.9
httptools                              0.6.4
httpx                                    0.28.1
huggingface-hub                        0.31.1
idna                                     3.10
importlib_metadata                     8.6.1
interegular                              0.3.3
Jinja2                                 3.1.6
jiter                                    0.9.0
jsonschema                               4.23.0
jsonschema-specifications                2025.4.1
lark                                     1.2.2
llguidance                               0.7.19
lm-format-enforcer                     0.10.11
markdown-it-py                           3.0.0
MarkupSafe                               3.0.2
mdurl                                    0.1.2
mistral_common                           1.5.4
modelscope                               1.25.0
mpmath                                 1.3.0
msgspec                                  0.19.0
multidict                              6.4.3
multiprocess                           0.70.16
nest-asyncio                           1.6.0
networkx                                 3.4.2
ninja                                    1.11.1.4
numpy                                    2.2.5
openai                                 1.78.1
opencv-python-headless                   4.11.0.86
opentelemetry-api                        1.33.0
opentelemetry-exporter-otlp            1.33.0
opentelemetry-exporter-otlp-proto-common 1.33.0
opentelemetry-exporter-otlp-proto-grpc   1.33.0
opentelemetry-exporter-otlp-proto-http   1.33.0
opentelemetry-proto                      1.33.0
opentelemetry-sdk                        1.33.0
opentelemetry-semantic-conventions       0.54b0
opentelemetry-semantic-conventions-ai    0.4.8
outlines                                 0.1.11
outlines_core                            0.1.26
packaging                              25.0
pandas                                 2.2.3
partial-json-parser                      0.2.1.1.post5
pillow                                 11.2.1
pip                                    25.1.1
prometheus_client                        0.21.1
prometheus-fastapi-instrumentator      7.1.0
propcache                              0.3.1
protobuf                                 5.29.4
psutil                                 7.0.0
py-cpuinfo                               9.0.0
pyarrow                                  20.0.0
pycountry                              24.6.1
pydantic                                 2.11.4
pydantic_core                            2.33.2
Pygments                                 2.19.1
python-dateutil                        2.9.0.post0
python-dotenv                            1.1.0
python-json-logger                     3.3.0
python-multipart                         0.0.20
pytz                                     2025.2
PyYAML                                 6.0.2
pyzmq                                    26.4.0
referencing                              0.36.2
regex                                    2024.11.6
requests                                 2.32.3
rich                                     14.0.0
rich-toolkit                           0.14.6
rpds-py                                  0.24.0
safetensors                              0.5.3
scipy                                    1.15.3
sentencepiece                            0.2.0
setuptools                               79.0.1
setuptools-scm                           8.3.1
shellingham                              1.5.4
six                                    1.17.0
sniffio                                  1.3.1
starlette                              0.46.2
sympy                                    1.14.0
tiktoken                                 0.9.0
tokenizers                               0.21.1
torch                                    2.7.0+cpu
torchaudio                               2.7.0+cpu
torchvision                              0.22.0+cpu
tqdm                                     4.67.1
transformers                           4.51.3
triton                                 3.2.0
typer                                    0.15.3
typing_extensions                        4.13.2
typing-inspection                        0.4.0
tzdata                                 2025.2
urllib3                                  2.4.0
uvicorn                                  0.34.2
uvloop                                 0.21.0
vllm                                     0.8.5.dev619+g60f762433.cpu
watchfiles                               1.0.5
websockets                               15.0.1
wheel                                    0.45.1
wrapt                                    1.17.2
xgrammar                                 0.1.18
xxhash                                 3.5.0
yarl                                     1.20.0
zipp                                     3.21.0

vitalgg 发表于 2025-5-20 10:06:47

本帖最后由 vitalgg 于 2025-5-20 10:27 编辑

dcl1214 发表于 2025-5-20 09:38
我们好像搞过一次python,发现对系统依赖太严格了,比如说vcruntime等等,我们客户现场有WEN7WEN8W ...
python的模块太多,相互依赖,而且各版本或自身的版本前后兼容性太差。
py2 跟 py3 之间也互不兼容。好多模块是个人开发者公布和维护的,比较随意。

所以运行python要做环境隔离。如docker 或 venv . 在docker 或 venv 下 ,python 也是自给自足的。

moshouhot 发表于 2025-5-22 08:33:50

AI对这种模式熟悉吗?有尝试AI来编写相关代码吗?有没有相关提示词来解释这种模式?
页: [1]
查看完整版本: 混合编程-- 操作 json数据 autolisp&(python/nodejs)