以下代码可以在JPEG,Docx,zip和其他几种文件格式上正常运行。然后,我尝试在mpg-filer上运行,但是我被无法调试的“错误:写入EPIPE”击中。使用try / catch结构还会导致未捕获的异常。
代码:
var fs = require('fs')
const { spawn } = require('child_process')
var file = '/path/to/some/file.jpg'
var rs = fs.createReadStream(file)
const exiftool = spawn('exiftool', ['-json', '-']);
var exif = ''
exiftool.stdout.on('data', function(chunk) {
exif += chunk
})
exiftool.on('close', function(code) {
console.log('Sourcefile: %s', JSON.parse(exif)[0].SourceFile)
})
exiftool.on('error', function(error) {
console.log('exiftool has error: %s', error)
})
rs.pipe(exiftool.stdin)
使用mpg文件时的错误:
events.js:167
throw er; // Unhandled 'error' event
^
Error: write EPIPE
at WriteWrap.afterWrite [as oncomplete] (net.js:835:14)
Emitted 'error' event at:
at Socket.onerror (_stream_readable.js:687:12)
at Socket.emit (events.js:182:13)
at onwriteError (_stream_writable.js:431:12)
at onwrite (_stream_writable.js:456:5)
at _destroy (internal/streams/destroy.js:40:7)
at Socket._destroy (net.js:605:3)
at Socket.destroy (internal/streams/destroy.js:32:8)
at WriteWrap.afterWrite [as oncomplete] (net.js:837:10)
答案 0 :(得分:1)
编辑:由于评论中的问题而更正了代码
当您尝试写入封闭的流时,可能会发生这种错误
尝试/捕获不是处理流错误的方法,但是您可以通过以下方式做到这一点:
rs.pipe(exiftool.stdin).on('error', function(e){ console.log("rs.pipe has error:" + e.message) });