2014-01-20 3 views
6

The Node.js документы API с использованием дополнительного STDIO (Fd = 4) при порождении дочернего процесса:Extra STDIO потоков для Node.js обработки

// Open an extra fd=4, to interact with programs present a 
// startd-style interface. 
spawn('prg', [], { stdio: ['pipe', null, null, null, 'pipe'] }); 

Это STDIO будет доступен для родительского процесса с помощью ChildProcess.stdio[fd] ,

Как ребенок может получить доступ к этим дополнительным stdios? Давайте используем поток вместо потока в дескрипторе файла 3 (fd = 3).

/* parent process */ 

// open file for read/write 
var mStream = fs.openSync('./shared-stream', 'r+'); 

// spawn child process with stream object as fd=3 
spawn('node', ['/path/to/child.js'], {stdio: [0, 1, 2, mStream] }); 
+0

Вы решили эту проблему? – Bartvds

ответ

7

Хотя node.js не документирует это в API, вы можете читать/писать в этих потоках с порядковым номером дескриптора файла, используя fs.read и fs.write.

Я не нашел ничего от проверки объекта process, который указывает на наличие этих доступных stdios для дочернего процесса, насколько я знаю, вы не сможете определить, доступны ли эти stdios из ребенок.

Однако, если вы точно знаете, что ваш дочерний процесс будет порождал с этими stdios, то вы можете использовать функции чтения/записи следующим образом:

var fd_index = 3; 
fs.write(fd_index, new Buffer(data, 'utf8'), 0, data.length, null, function(err, bytesWritten, buffer) { 
    if(err) return failure(); 
    else ... 
    // success 
}); 
+0

Как вам это с потоками? – Bartvds

+0

Если вы хотите взаимодействовать с потоками вместо файловых дескрипторов, вы можете использовать [fs.createReadStream] (http://nodejs.org/api/fs.html#fs_fs_createreadstream_path_options) и [fs.createWriteStream] (http: // nodejs .org/api/fs.html # fs_fs_createwritestream_path_options) –

+0

Да, найдено, что здесь: https://stackoverflow.com/questions/24582183/how-to-stream-to-from-a-file-descriptor-in-node/ 24582892? noredirect = 1 # comment38127169_24582892 – Bartvds

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