2012-03-02 2 views
3

Недавно я попросил/принял ответ на вопрос, который у меня был ранее: How can I replicate the functionality of a wget with nodejs.Показать прогресс на node.js child_process.exec?

Теперь мой сценарий работает отлично, но я хотел бы показать пользователю процент, который загружен. Я не уверен, что это подвергло нас воздействию (я не видел его в документах), но я решил, что я спрошу здесь все равно. Хотелось бы помочь!

Спасибо!

ответ

7

Да, вы можете. С child_process.spawn. В то время как child_process.exec выполняет команду и буферизирует вывод, spawn дает вам события на data, error и end. Поэтому вы можете слушать это и рассчитать свой прогресс. В базовом примере есть node docs for spawn.

Обновление: Я видел ваш другой вопрос. Для этого вы можете использовать wget, но я рекомендую вместо этого узел nodejs request. Вот как извлечь файл с запросом:

var request = require("request"); 

request(url, function(err, res, body) { 
    // Do funky stuff with body 
}); 

Если вы хотите, чтобы отслеживать прогресс, вы передаете обратный вызов onResponse:

function trackProgress(err, res) { 
    if(err) 
    return console.error(err); 

    var contentLength = parseInt(res.headers["content-length"], 10), 
     received = 0, progress = 0; 
    res.on("data", function(data) { 
    received += data.length; 
    progress = received/contentLength; 
    // Do funky stuff with progress 
    }); 
} 

request({url: url, onResponse: trackProgress}, function(err, res, body) { 
    // Do funky stuff with body 
}); 
+0

вы говорите, "порождение дает событие на данные, ошибку и в конце ». Итак, можно ли запустить выполнение скрипта python с помощью spawn? Если да, можете ли вы ответить на этот вопрос, пожалуйста? http://stackoverflow.com/questions/33802895/show-progressbar-of-python-script-execution-with-nodejs – AshBringer