2017-01-25 4 views
0

Простите глупый вопрос, если это так, я относительно новичок в узле.Выход дочернего процесса в socket.io

Я создаю дочерний процесс на моем сервере узлов, чтобы импортировать набор данных в базу данных. Детский процесс, выполняющий osm2pgsl с параметрами, имеет свой собственный внутренний вывод, который отображает текущие обработанные данные и счетчик того, что было обработано.

У меня есть простой сценарий узла, который запускает этот процесс и регистрирует информацию из этого процесса по мере поступления. Основная информация, к которой мне нужен доступ, не опрошена через stdout, stderr or on, что является проблематичным.

Узел сценария

var util = require('util'), 
    spawn = require('child_process').spawn, 
    file = process.argv[2], 
    ls = spawn('osm2pgsql', ['--slim', '-d', 'gis', '-U', 'postgres', '--number-processes', '3', file]); 

ls.stdout.on('data', function (data) { 
    process.stdout.write('Currently processing: ' + data.toString() + '\r'); 
}); 

ls.stderr.on('data', function (data) { 
    console.log('stderr: ' + data.toString()); 
}); 

ls.on('exit', function (code) { 
    console.log('child process exited with code ' + code.toString()); 
}); 

Выход

Mid: pgsql, scale=100 cache=800 
Setting up table: planet_osm_nodes 

stderr: NOTICE: table "planet_osm_nodes" does not exist, skipping 

stderr: Setting up table: planet_osm_ways 

stderr: NOTICE: table "planet_osm_ways" does not exist, skipping 

stderr: Setting up table: planet_osm_rels 

stderr: NOTICE: table "planet_osm_rels" does not exist, skipping 

stderr: 
Reading in file: /OSMDATA/great-britain-latest.osm.pbf 

Processing: Node(10k 10.0k/s) Way(0k 0.00k/s) Relation(0 0.00/s) 
Processing: Node(20k 20.0k/s) Way(0k 0.00k/s) Relation(0 0.00/s) 
Processing: Node(30k 30.0k/s) Way(0k 0.00k/s) Relation(0 0.00/s) 

От stderr: линии, вы можете увидеть, что я могу получить доступ к этому течению, но Processing: ..., что мне нужно доступ к превыше всего. Это печатает из дочернего процесса, и я не уверен, как обращаться к нему напрямую.

Есть ли способ доступа к выходу (выше) из моего сервера Nodejs?

EDIT: Я собираюсь подключить этот вывод к Socket.io, но сначала мне нужен доступ к нему, следовательно, название.

ответ

0

Понял, но это может быть полезно людям в будущем.

Поскольку Processing: ... был быть рекурсивно обновляется на одной линии с использованием \r в osm2pgsql исходном коде, это было на самом деле выходит из stderr таким же образом, как и все остальное.

Выход для Processing: ... фактически следующая строка:

stderr: 
Reading in file: /OSMDATA/great-britain-latest.osm.pbf 

Processing: Node(10k 10.0k/s) Way(0k 0.00k/s) Relation(0 0.00/s) 

Это не приходила мне в голову, что выход может быть длинной несколько строк.

Я могу получить доступ к продукции через ls.stderr.on('data', function(data) {});

Смежные вопросы