2014-10-30 12 views
2

я получаю ошибку EPIPE, на поток стандартного ввода, и я не могу найти причину:Node.js - Ошибка: написать код EPIPE: «EPIPE

Это мой код:

var checkFile = function(data, callback){ 
    var child_process = spawn('ffprobe', ['-print_format', 'json', '-show_format', 'pipe:0']); 

    var stdInError = function(e) { 
     console.log(e); 
    } 
    child_process.stdin.on('error', stdInError); 

    var generalError = function() { 
     console.log("general Error" + "\n"); 
    } 
    child_process.on('error', generalError); 

    child_process.stdout.on('data', function(data){ 
     console.log("data" + "\n"); 
     console.log(data); 
     console.log("\n"); 
    }); 

    child_process.on('close', function(){ 
     console.log("close" + "\n"); 
    } 

    var exit = function(){ 
     console.log("exit"); 
    } 
    child_process.on('exit', exit); 

    console.log("write" + "\n"); 
    child_process.stdin.write(data); 
    child_process.stdin.end(); 
}; 

И это мой выход:

write 

data 

<Buffer 7b 0a 20 20 20 20 22 66 6f 72 6d 61 74 22 3a 20 7b 0a 20 20 20 20 20 20 20 20 22 66 69 6c 65 6e 61 6d 65 22 3a 20 22 70 69 70 65 3a 30 22 2c 0a 20 20 20 ...> 

data 

<Buffer 0a 7d 0a> 

{ [Error: write EPIPE] code: 'EPIPE', errno: 'EPIPE', syscall: 'write' } 

exit 
close 

Я не могу найти причину этой ошибки, я также пытался реализовать

child_process.stderr.on('data', function (data) { 
    //throw errors 
    console.log('stderr: ' + data); 
}); 

И каждая строка, напечатанная ffprobe (которая является программным обеспечением для проверки спецификаций аудио/видеофайлов), помечена как stderr. Например,:

stderr: ffprobe version 2.2.4 Copyright (c) 2007-2014 разработчики FFmpeg , построенный 2 июля 2014 года 15:07:45 с версией Apple LLVM версии 5.1 (clang-503.0.40) (на основе LLVM 3.4svn) Конфигурация: --prefix =/usr/local/Cellar/ffmpeg/2.2.4 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree - enable-hardcoded-tables --enable-avresample --enable-vda --cc = clang --host-cflags = --host-ldflags = --enable-libx264 --enable-libfaac --enable-libmp3lame --enable -libxvid --enable-libfreetype --enable-libtheora --enable-libvorbis --enable-libvpx --enable-librtmp --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-aacenc - enable-libass --enable-ffplay --enable-libspeex --enable-libschroedinger --enable-libfdk-aac --enable-libopus --enable-frei0r --enable-libopenjpeg - экстра-CFLAGS = '- I/USR/местные/Подвал/openjpeg/1.5.1_1/включать/openjpeg-1,5' libavutil 52. 66,100/52. 66,100

STDERR: кодеком 55. 52,102/52,102 55. 55. libavformat 33,100/33,100 55. libavdevice 55. 10,100/10,100 55. libavfilter 4. 2.100/2.100 4. libavresample 1. 2. 0/1. 2. 0 libswscale 2. 5,102/5,102 2. libswresample 0. 18.100/0. 18.100 libpostproc 52. 3.100/52. 3.100

+0

Какую версию узла вы используете? – mscdex

+0

Кроме того, вы пытались использовать '' -i ',' pipe: 0'' вместо '' pipe: 0''? – mscdex

+0

v0.10.28 @mscdex – MeV

ответ

3

После нескольких тестов я обнаружил ошибку, и ошибка вызвана слишком большим файлом.

+0

как вы это решили? –

+0

В моем случае загруженный файл был слишком большим и уменьшал размер его, чтобы предотвратить ошибку – MeV