我正在尝试使用节点child_process模块在Windows中执行命令。问题是有问题的应用程序(Windows中的ftp命令行)会提示输入用户名和密码。我试图通过以下方式向命令提供所询问的信息:
var ftp = spawn('ftp',['<<ip of server>>']);
var authenticated = false;
var commandsSended = false;
ftp.stdin.write("debug\n");
ftp.stdin.write(os.EOL);
ftp.stdout.on("data", function(data) {
console.log("FTPService: " + data.toString());
if(data.toString().indexOf("226 Transfer complete") > -1) {
ftp.stdin.write('bye\n');
} else if(data.toString().indexOf("Gebruiker") > -1) {
ftp.stdin.write("<<username of server>>");
ftp.stdin.write(os.EOL);
} else if(data.toString().indexOf("Wachtwoord") > -1) {
ftp.stdin.write("<<password of server>>");
ftp.stdin.write(os.EOL);
authenticated = true;
}
if(authenticated && !commandsSended) {
ftp.stdin.write("put " + filePath + " " + newName + "\n");
commandsSended = true;
}
});
ftp.on('exit', function(code) {
if(code > 0) {
console.log("FTPService closed with error " + code);
} else {
console.log("FTPService closed without error");
}
});
这不会导致错误,但根本不起作用。在linux中我没有问题,因为我可以使用命令将登录信息作为参数发送。我知道nodejs有它自己的模块,但我需要让它使用命令行(还需要执行其他命令,这也会导致需要填写的提示)。