childprocess.spawn或exec通过stderr而不是stdout显示输出
此代码:
const spawn = require('child_process').spawn; const convert = spawn('convert', ['nda.pdf', 'nda.jpg']); convert.stdout.on('data', function (data) { console.log('stdout: ' + data.toString()); }); convert.stderr.on('data', function (data) { console.log('stderr: ' + data.toString()); }); convert.on('exit', function (code) { console.log('child process exited with code ' + code.toString()); });
显示这个输出:
stderr: /tmp/magick-27144xZVKt6FGxrJR1 PNG 2409x3420 2409x3420+0+0 8-bit sRGB 1.027MB stderr: 0.150u 0:00.149 stderr: /tmp/magick-27144xZVKt6FGxrJR2 PNG 2409x3423 2409x3423+0+0 8-bit sRGB 4.237MB 0.250u 0:00.260 stderr: /tmp/magick-27144xZVKt6FGxrJR3 PNG 2409x3423 2409x3423+0+0 8-bit sRGB 3.911MB 0.240u 0:00.239 stderr: /tmp/magick-27144xZVKt6FGxrJR4 PNG 2409x3417 2409x3417+0+0 8-bit sRGB 1.241MB 0.190u 0:00.190 ... ... ... stderr: nda.pdf=>Palette-3.jpg[3] PNG 2409x3417 2409x3417+0+0 16-bit sRGB 759KB 11.210u 0:02.369 child process exited with code 0
所以它似乎将输出redirect到stderr
而不是stdout
也一切正常执行的命令。
当我使用child_process.exec()
时会发生同样的情况。
为什么会发生?
通过Python运行命令时,我遇到了类似的问题。 实际的问题是您正在尝试运行的命令本身。要知道命令的输出转到stderr或stdout,请执行以下操作:
root@sh> cmd > /tmp/file
如果你看到命令输出到/ tmp / file,那么这意味着默认命令会把它的输出引出到标准输出。如果不行,你实际上可以看到屏幕上显示的内容。
现在,如果您看到屏幕上粘贴的内容,请运行
root@sh> cmd 2> /tmp/file
现在,如果内容移动到/ tmp / file,则意味着该命令实际上将其通常的输出引发到stderr。
然后你可以确认真正的问题不是用你使用的语言,而是用实际的命令把它输出的方式(stderr或者stdout)。