微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐