Python中如何运行Node.js开源模块,pyexecjs是否只能简单执行?

如题,win10 安装 python3.6 后,gdcm 模块无法安装(据说 python2.7 可以安装成功),这个是我迄今为止找到的唯一处理包含压缩 jpg 的 dicom 文件办法,pydcm 无法直接读取有压缩的 dcm 文件 发现好多 js 开源代码可以处理 dcm 压缩图像,比如 https://unpkg.com/cornerstone-core 有没有办法将 js 执行结果传给 python 二次处理


Python中如何运行Node.js开源模块,pyexecjs是否只能简单执行?

4 回复

python 用 os.popen 调用 node 然后取结果,或者更简单的,直接 js 写文件 python 读就好。


我理解你的需求。要在Python中运行Node.js模块,确实有几个方案,但各有适用场景。

先说pyexecjs,它确实只能执行简单的JS代码片段,不适合复杂模块。如果你需要完整调用Node.js生态的模块,建议用nodejs子进程方案:

import subprocess
import json

def run_node_module(module_name, function_name, *args):
    # 创建临时JS文件来加载模块
    js_code = f"""
    const module = require('{module_name}');
    const result = module.{function_name}({json.dumps(args)});
    console.log(JSON.stringify(result));
    """
    
    # 通过Node.js执行
    result = subprocess.run(
        ['node', '-e', js_code],
        capture_output=True,
        text=True,
        check=True
    )
    
    return json.loads(result.stdout)

# 示例:调用lodash的chunk方法
data = [1, 2, 3, 4, 5]
chunks = run_node_module('lodash', 'chunk', data, 2)
print(chunks)  # [[1, 2], [3, 4], [5]]

对于更复杂的交互,考虑用WebSocket或RPC架构,比如:

  1. Express API:将Node.js模块封装成HTTP服务
  2. gRPC:跨语言的高性能RPC
  3. zerorpc:基于ZeroMQ的简单RPC

如果只是用JS库的功能,也可以看看有没有对应的Python移植版本,比如lodash对应pydashmoment.js对应pendulum

总结:根据复杂程度选择合适方案。

PYexecJS 是只能执行简单的,1 楼的办法不错

怎么说是简单的?

回到顶部