簡體   English   中英

如何使spawnSync和fs.readFile依次執行?

[英]How to make spawnSync and fs.readFile to execute one after other?

我有一個python腳本,該腳本通過將FILE作為輸入來返回JSON文件作為輸出。

我有10個文件,我在循環內使用spawnSync,循環內使用fs.readFile來讀取來自python腳本的JSON文件。

但是問題是spawnSync阻止了fs.readFile,直到它執行所有10個文件的python腳本。 由於spawnSyncfs.readFile都在for循環內 ,因此我希望fs.readFile在第一個python腳本執行並輸出JSON文件后立即讀取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);
       }
   });
}

如果您依賴使用第三方模塊,那么我建議使用async.eachSeries 異步模塊的方法來解決此問題

var filename = ['first.txt','second.txt','third.txt',....]
async.eachSeries(filename, function(item, next) {

  var myscript = spawn('python', ['/pathToPython/myPython.py', item]);
  fs.readFile('/pathToPython/' + item + '.json', 'utf8', function(err, data) {
    if (err) {
      console.log(err);
    } else {
      console.log(data);
      next();
    }
  });
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM