Don*_*ong 5 spawn child-process node.js
我无法在以下代码中获得任何输出:
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);
});
Run Code Online (Sandbox Code Playgroud)
它适用于普通脚本,如“ls”、“pwd”等。但不适用于交互式程序,如“ftp”、“telnet”。有什么建议么?
编辑:
以另一个脚本为例:
#!/usr/bin/env python
name = raw_input("your name>")
print name
Run Code Online (Sandbox Code Playgroud)
当生成此脚本时,我希望使用数据事件获取提示“your name>”,以便稍后可以将某些内容输入到标准输入中。
问题是我在数据事件中什么也没有得到,而且似乎这些事件都没有被触发。
在交互模式下,有一个命令解释器从标准输入读取用户输入,然后相应地打印输出。所以你必须写入标准输入才能做某事。例如,使用telnet命令将以下行添加到您的代码中:
child.stdin.write('?\n');
child.stdin.write('quit\n');
Run Code Online (Sandbox Code Playgroud)
输出:
stdout: Commands may be abbreviated. Commands are:
! cr mdir proxy send
$ delete mget sendport site
account debug mkdir put size
append dir mls pwd status
ascii disconnect mode quit struct
bell form modtime quote system
binary get mput recv sunique
bye glob newer reget tenex
case hash nmap rstatus trace
ccc help nlist rhelp type
cd idle ntrans rename user
cdup image open reset umask
chmod lcd passive restart verbose
clear ls private rmdir ?
close macdef prompt runique
cprotect mdelete protect safe
child process exited with code 0
Run Code Online (Sandbox Code Playgroud)