Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何解析child_process.spawn stdio的process.stdin/process.stdout_Node.js - Fatal编程技术网

Node.js 如何解析child_process.spawn stdio的process.stdin/process.stdout

Node.js 如何解析child_process.spawn stdio的process.stdin/process.stdout,node.js,Node.js,我尝试在节点脚本中使用wrap命令,并为add/replace字符串解析stdin/out流 它用于自动插入ssh/sudo密码,例如,我不想使用expect,因为它太死板了。类似于iTerm2的触发器功能性,但终端不可知 如果您知道这方面的工具,或者您有更好的想法,欢迎您使用=D 我试试这个: #!/usr/bin/env node const child_process = require('child_process'); const command = ['vi', ['index.j

我尝试在节点脚本中使用wrap命令,并为add/replace字符串解析stdin/out流

它用于自动插入ssh/sudo密码,例如,我不想使用
expect
,因为它太死板了。类似于iTerm2的触发器功能性,但终端不可知

如果您知道这方面的工具,或者您有更好的想法,欢迎您使用=D

我试试这个:

#!/usr/bin/env node

const child_process = require('child_process');
const command = ['vi', ['index.js']];

let spawned_process = child_process.spawn(...command, {
    env: process.env,
    shell: '/bin/bash',
    stdio: [process.stdin, process.stdout, process.stderr]
});
这工作得很好,但我不知道如何访问
process.stdin
process.stdout

我也试过:

#!/usr/bin/env node

const child_process = require('child_process');
const command = ['vi', ['index.js']];

let spawned_process = child_process.spawn(...command, {
    env: process.env,
    shell: '/bin/bash',
    stdio: [process.stdin, 'pipe', 'pipe']
});

// process.stdin.setRawMode(true);
// process.stdin.pipe(spawned_process.stdin);

spawned_process.stdout.pipe(process.stdout);
spawned_process.stderr.pipe(process.stderr);

spawned_process.on('exit', function (code) {
  process.exit(code);
});
#!/usr/bin/env node

const child_process = require('child_process');
const fs = require('fs');
const tty = require('tty');
const command = ['vi', ['index.js']];

// find in `ttys` module code
let ttyFd = fs.openSync('/dev/tty', 'w');

let stdout = new tty.WriteStream(ttyFd);
stdout._type = 'tty';

if (stdout._handle && stdout._handle.unref) {
  stdout._handle.unref();
}

if (stdout._refreshSize) {
  process.on('SIGWINCH', function() {
    stdout._refreshSize();
  })
}

stdout.pipe(process.stdout);

var spawned_process= child_process.spawn(...command, {
    env: process.env,
    shell: '/bin/bash',
    stdio: [process.stdin, stdout, process.stderr]
});
这也可以很好地工作,使用
事件流
模块,我可以解析和修改流

但我有一个信息:

Vim:警告:输出未连接到端子

如果我将
process.stdin
与已注释的代码进行管道连接,则输入时会有相同的消息,并且如果没有
-tt
标志,
ssh
命令将无法工作

我也试过:

#!/usr/bin/env node

const child_process = require('child_process');
const command = ['vi', ['index.js']];

let spawned_process = child_process.spawn(...command, {
    env: process.env,
    shell: '/bin/bash',
    stdio: [process.stdin, 'pipe', 'pipe']
});

// process.stdin.setRawMode(true);
// process.stdin.pipe(spawned_process.stdin);

spawned_process.stdout.pipe(process.stdout);
spawned_process.stderr.pipe(process.stderr);

spawned_process.on('exit', function (code) {
  process.exit(code);
});
#!/usr/bin/env node

const child_process = require('child_process');
const fs = require('fs');
const tty = require('tty');
const command = ['vi', ['index.js']];

// find in `ttys` module code
let ttyFd = fs.openSync('/dev/tty', 'w');

let stdout = new tty.WriteStream(ttyFd);
stdout._type = 'tty';

if (stdout._handle && stdout._handle.unref) {
  stdout._handle.unref();
}

if (stdout._refreshSize) {
  process.on('SIGWINCH', function() {
    stdout._refreshSize();
  })
}

stdout.pipe(process.stdout);

var spawned_process= child_process.spawn(...command, {
    env: process.env,
    shell: '/bin/bash',
    stdio: [process.stdin, stdout, process.stderr]
});
在这里我也可以使用
事件流
模块来做我想做的事情,但是这个代码不起作用,只有一个输入对两个工作

我希望有第一个块代码的行为,没有带有
vi
ssh
的警告消息,但是可以将流编辑为第二个块代码

谢谢你的帮助

我尝试在节点脚本中使用wrap命令,并为add/replace字符串解析stdin/out流

据我所知,以下是处理管道的方法

process.stdin.resume();
process.stdin.setEncoding('utf8');
process.stdin.on('data', function(data) {

  process.stdout.write(data);

});
我希望这有帮助