[英]Child process output to socket.io
如果可以,请原谅这个愚蠢的问题,我对Node还是比较陌生。
我在节点服务器上生成一个子进程,以将数据集导入数据库。 使用参数执行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服务器中访问输出(上方)?
编辑 :我打算将此输出传递到Socket.io,但我需要首先访问它,因此需要标题。
弄清楚了,但将来可能对人们有用。
因为正在使用osm2pgsql
源代码中的\\r
在一行上递归更新Processing: ...
,所以实际上它以与其他所有方式相同的方式从stderr
中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) {} );
访问输出ls.stderr.on('data', function(data) {} );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.