节点子进程,未从 CLI 获取输出



>我正在尝试使用子进程运行基本的cmd命令,我正在使用nodejs测试一些cli,但不明白为什么我没有得到任何输出,这里有一个简单的例子:

const spawn = require('child_process').spawn
let child = spawn('cmd.exe',['/K'])
child.stdout.setEncoding('utf8');
child.stdout.on('data', (data) => {
console.log(data.toString())
});
child.stdin.write('heroku loginn');

输出应为:

heroku: 
Enter your login credentials
Email :

我错过了什么?感谢

更新:

我一直在玩代码,可以得到我想要的:

const spawn = require('child_process').spawn
let child = spawn('heroku',['login' ,'-i']);
child.stderr.on('data', function(data) {        
child.stdin.write('email@hotmail.com');
});

一旦stderr.on被解雇,我必须输入电子邮件地址 但是在我打电话给child.stdin.write('email@hotmail.com');后,我收到一个错误:

'sh' is not recognized as an internal or external command,
operable program or batch file.

任何人都可以让我知道此错误的原因是什么?

我找不到任何可以解决它的东西,但通过在线研究,我发现 node-pty (https://github.com/microsoft/node-pty( 可以完成这项工作,对于 Windows,您必须安装一些额外的应用程序,但适用于我测试的大多数 CLI,这里有一个简单的例子:

var os = require('os');
var pty = require('node-pty');
var shell = os.platform() === 'win32' ? 'powershell.exe' : 'bash';
var ptyProcess = pty.spawn(shell, ['heroku login -i'], {
name: 'heroku',
cwd: process.env.HOME,
env: process.env
});
ptyProcess.write('my@email.comr');
ptyProcess.write('passwordr');
ptyProcess.on('data', function(data) {
ptyProcess.write('n');
process.stdout.write(data);
});

这是另一个:

var os = require('os');
var pty = require('node-pty');
var shell = os.platform() === 'win32' ? 'powershell.exe' : 'bash';
var ptyProcess = pty.spawn(shell, ['vue create app'], {
name: 'vue',
cwd: process.env.HOME,
env: process.env
});
ptyProcess.write('keydown');
ptyProcess.on('data', function(data) {
process.stdout.write(data.toString().trim());
});

相关内容

  • 没有找到相关文章

最新更新