node.js – 无法使用交互式脚本获取child_process.spawn的输出

我无法在以下代码中获得任何输出

var spawn = require('child_process').spawn,script = 'ftp',child = spawn(script);

child.stdout.on('data',function (data) {
  console.log('stdout: ' + data);
});

child.stderr.on('data',function (data) {
  console.log('stderr: ' + data);
});

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

它适用于普通脚本,如’ls’,’pwd’等.但不适用于’ftp’,’telnet’等交互式程序.有什么建议?

编辑:

以另一个脚本为例:

#!/usr/bin/env python
name = raw_input("your name>")
print name

当产生这个脚本时,我希望获取提示“你的名字>”与data事件,以便我可以后来输入一些东西到stdin.

问题是我在数据事件中什么都没有,似乎没有触发这些事件.

解决方法

ls,cat可通过输入输出错误流控制.

ftp,telnet可以通过tty间接控制.

该协议也基于输入/输出流,但它更复杂.您可以使用可用的包来处理该协议.

https://github.com/chjj/pty.js

var pty = require('pty.js');
var term = pty.spawn('ftp',[],options);

term.on('data',function(data) {
  console.log(data);
});

term.write(ftpCmd + '\r');

pty的作者有一些有趣的例子,他通过网络套接字向网络转发pty,包括终端游戏:
https://github.com/chjj/tty.js

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...