[英]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腳本。 由於spawnSync和fs.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.