Hyperledger fabric Hyperledger结构:从使用节点SDK编写的链代码调用Python脚本

Hyperledger fabric Hyperledger结构:从使用节点SDK编写的链代码调用Python脚本,hyperledger-fabric,hyperledger-fabric-sdk-js,Hyperledger Fabric,Hyperledger Fabric Sdk Js,我正在使用Hyperledger Fabric开发一个应用程序,其中用nodeJS编写的应用程序调用同样用nodeJS编写的链码函数。这个链码函数应该调用Python脚本,执行一些操作,并将结果写入链码函数。此链码函数应将Python脚本返回的结果存储在分类账上,并将成功存储状态返回给调用应用程序。 我尝试使用nodeJS提供的子流程模块以以下方式实现此目的- async mergeModel(ctx, modelNumber1, modelNumber2) { console.info

我正在使用Hyperledger Fabric开发一个应用程序,其中用nodeJS编写的应用程序调用同样用nodeJS编写的链码函数。这个链码函数应该调用Python脚本,执行一些操作,并将结果写入链码函数。此链码函数应将Python脚本返回的结果存储在分类账上,并将成功存储状态返回给调用应用程序。 我尝试使用nodeJS提供的子流程模块以以下方式实现此目的-

async mergeModel(ctx, modelNumber1, modelNumber2) {
    console.info('============= START : Merge Model ===========');
    const modelAsBytes1 = await ctx.stub.getState(modelNumber1); // get the model from chaincode state
    const modelAsBytes2 = await ctx.stub.getState(modelNumber2); // get the model from chaincode state

    if (!modelAsBytes1 || modelAsBytes1.length === 0) {
        throw new Error(`${modelNumber1} does not exist`);
    }
    if (!modelAsBytes2 || modelAsBytes2.length === 0) {
        throw new Error(`${modelNumber2} does not exist`);
    }
    const spawn = require('child_process').spawn;
    const pythonProcess = spawn('python',['mergeModel.py', modelAsBytes1, modelAsBytes2]);
    pythonProcess.stdout.on('data', (data) => {
        console.log(data);
    });
}
python脚本mergeModel.py存储在与链码相同的目录中。 但是,这并不像预期的那样调用python脚本。 有什么我不知道的吗。 谢谢

这是一种非常糟糕的做法,请不要做这种事情 影响事务执行。尝试在中执行python脚本 Nodejs AppServer,并在获得结果后调用链码


您可以使用包的效率要比nodejs更高。必须澄清的是,您是从链码中调用脚本的吗?这样做是非常糟糕的做法
> This chain code function should call a Python script, do something and
  written the results to the chaincode function.