如何让spawnSync和fs.readFile一个接一个地执行?

时间:2016-09-21 17:11:03

标签: javascript python json node.js express

我有一个python脚本,它通过将FILE作为输入返回JSON文件作为输出。

我有10个文件,我在 for loop 中使用 spawnSync ,在内部循环中我有 fs.readFile 来读取JSON文件,这是来自python脚本。

但问题是 spawnSync 阻止 fs.readFile ,直到它执行包含所有10个文件的python脚本。由于 spawnSync fs.readFile 都位于 for loop 中,我希望 fs.readFile 读取JSON文件只要第一个python脚本执行并输出JSON文件。

但它没有发生。 spawnSync 正在阻止,它继续执行下一个文件来执行python脚本。 fs.reafFile 应该在文件执行后立即打印数据。请帮忙,这是我的代码片段。

var spawn = require('child_process').spawnSync;
var fs = require('fs');
var filename = ['first.txt','second.txt','third.txt',....]
for(var i=0;i<10;i++)
{
  var myscript = spawn('python',['/pathToPython/myPython.py',filename[i]]);
  fs.readFile('/pathToPython/' + filename[i] + '.json','utf8',function(err,data){
         if(err){
               console.log(err);
         }else{
               console.log(data);
       }
   });
}

1 个答案:

答案 0 :(得分:1)

如果您依赖使用第三方模块,我建议使用async.eachSeries async模块的方法来解决此问题

$ echo "                  CAT {" | sed 's/^\([[:blank:]]*\)CAT/\1DOG/'
                  DOG {