我无法在以下代码中获得任何输出:
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