混合编程-- 操作 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
我们好像搞过一次python,发现对系统依赖太严格了,比如说vcruntime等等,我们客户现场有WEN7WEN8WEN10WEN11含ghost系统,最后,我们放弃了python,选择go,go是自给自足的,对系统依赖极低 moshouhot 发表于 2025-5-22 08:33
AI对这种模式熟悉吗?有尝试AI来编写相关代码吗?有没有相关提示词来解释这种模式?
这种模式只是通过http进行数据通信。可以是本地服务,也可以是网络服务。
ActiveX是通过COM+. 本地服务类似COM+, 网络服务类似DCOM
然后就可以发挥各语言的优势了。把lisp也变成胶水。
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}")
提交的键值替换成了新值。并且长整数能保持原值。
有点复杂,简单应该是vlisp调用vb的json 本帖最后由 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:27 编辑
dcl1214 发表于 2025-5-20 09:38
我们好像搞过一次python,发现对系统依赖太严格了,比如说vcruntime等等,我们客户现场有WEN7WEN8W ...
python的模块太多,相互依赖,而且各版本或自身的版本前后兼容性太差。
py2 跟 py3 之间也互不兼容。好多模块是个人开发者公布和维护的,比较随意。
所以运行python要做环境隔离。如docker 或 venv . 在docker 或 venv 下 ,python 也是自给自足的。 AI对这种模式熟悉吗?有尝试AI来编写相关代码吗?有没有相关提示词来解释这种模式?
页:
[1]