Заставить lftp записывать в стандартный вывод без предварительного закрытия процесса

Я пытаюсь обернуть программу lftp в приложение node.js, используя child_process. Проблема в том, что lftp не записывает свой вывод в стандартный вывод, поэтому я не могу перехватить его вывод в node.js. Образец кода:

var proc = require('child_process').spawn('lftp', ['-p', port, '-u', username + ',' + password, host]);

proc.stdout.on('data', function (data) {
    console.log('stdout:', data.toString('utf-8'));
});

proc.on('exit', function (code) {
    console.log('process exited with code ' + code);
});

proc.stdin.write('ls');
// proc.stdin.end();

Если я раскомментирую строку, которая вызывает stdin.end() для дочернего процесса lftp, вывод команды ls появится в моем терминале, как и должно быть. Если я этого не сделаю, процесс просто зависнет и ничего не выводится.

Я также пытался использовать unbuffer, но, похоже, он больше не позволяет мне писать на стандартный ввод lftp. Он выводит обычный материал «[Разрешение адреса хоста...]», но не вывод команды ls.

Мой вопрос: что мне нужно сделать, чтобы иметь возможность взаимодействовать с lftp, используя child_process node.js?


person Victor Stanciu    schedule 01.06.2012    source источник
comment
Почему вы пытаетесь взаимодействовать с интерактивным FTP-клиентом? npmjs.org перечисляет несколько модулей FTP для node.   -  person lanzz    schedule 01.06.2012
comment
Ни один из них не поддерживает FTP по сравнению с явным TTL/SSL, SFTP и т. д. Я подумал, что мне, вероятно, будет проще обернуть существующий FTP-клиент с помощью child_process.   -  person Victor Stanciu    schedule 01.06.2012


Ответы (1)


Ну, это было глупо. Я забыл написать новую строку после команды ls на стандартный ввод. Кажется, он работает без необходимости разбуфера.

person Victor Stanciu    schedule 01.06.2012