通过spawn将JSON从python返回到节点

通过spawn将JSON从python返回到节点,python,json,node.js,spawn,Python,Json,Node.js,Spawn,我有一个python脚本,它包含两个参数;目录和文件名 python脚本将从提供的目录中的特定文件创建一个JSON对象,并将其保存为第二个参数名称 但是,如果第二个参数等于字符串“stream”,则JSON数据将输出到STDOUT 我编写了一个节点脚本,生成一个子进程,从终端调用python脚本,它可以按预期工作 “严格使用”; const spawn=require(“子进程”)。spawn; const command=“(python路径)”; const loc=“(指向.py脚本的路

我有一个python脚本,它包含两个参数;目录和文件名

python脚本将从提供的目录中的特定文件创建一个JSON对象,并将其保存为第二个参数名称

但是,如果第二个参数等于字符串“stream”,则JSON数据将输出到STDOUT

我编写了一个节点脚本,生成一个子进程,从终端调用python脚本,它可以按预期工作

“严格使用”;
const spawn=require(“子进程”)。spawn;
const command=“(python路径)”;
const loc=“(指向.py脚本的路径)”;
const acct=process.argv[2];
const output=process.argv[3];
让callPy=spawn(命令,[“erik.py”,acct,output]{
cwd:loc,
stdio:“管道”
});
callPy.stdout.on(“数据”,(数据)=>{
if(data.toString()=“成功”){
控制台日志(acct,“已生成”);
}否则{
log(data.toString());
}

});我能够相对简单地使用WebSocket解决这个问题:


客户端提交请求,该请求通过socket.IO与服务器通信,请求被接收并触发spawn事件,当区块完成时,追加一个终止事件,该事件将触发终止子进程并将数据返回给客户端,因此您至少需要做两件事

  • 使用
    spawn
  • 一种异步模式,用于在每个可执行文件终止时等待命令执行并连接进程
一个极简主义的例子是

var cmd = new CommandLine({ 
    debug : true, 
    error : true, 
    delay : true });
// commandItemsArray is a list of commands list, command options, command arguments
commandItemsArray = [ ['ls','-l','./'], ['ls','-a','./'] ];
cmd.executeCommands( commandItemsArray
, function(results) {
    console.log( results );
}
, function(error) {
    console.log( error );
});
npm上有几个包可以同时执行这两项任务(搜索节点cli、命令行等),其中一个是使用
Promise的包。所有
模式都可以完成第二项任务:

      function PromiseAll(items, block, done, fail) {
        var self=this;
        var promises = [], index=0;
        items.forEach(function(item) {
          promises.push( function(item,i) {
              return new Promise(function(resolve, reject) {
                return block.apply(this,[item,index,resolve,reject]);
              });
            }(item,++index))
        });
        Promise.all(promises).then(function AcceptHandler(results) {
          if(done) done( results );
        }, function ErrorHandler(error) {
          if(fail) fail( error );
        });
      } //promiseAll