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

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>”,以便稍后可以将某些内容输入到标准输入中。

问题是我在数据事件中什么也没有得到,而且似乎这些事件都没有被触发。

use*_*109 2

在交互模式下,有一个命令解释器从标准输入读取用户输入,然后相应地打印输出。所以你必须写入标准输入才能做某事。例如,使用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)