나는 약간의 자유 시간을 가졌으므로 자바 스크립트 (NodeJS - ES6)의 모든 bash 스크립트를 자식 프로세스로 다시 작성하기로 결정했다. 사용자 입력을 자동화하고 싶을 때까지 모든 것이 순조롭게 진행되었습니다.nodejs 자식 프로세스가 입력을 원하거나 피드백 만 보내고 있는지 판단 할 수있는 방법이 있습니까?
예, 사용자 입력을 자동화 할 수 있습니다. 그러나 한 가지 문제가 있습니다. 주어진 data
이벤트가 피드백인지 또는 입력 요청인지 판단 할 수 없습니다. 적어도 나는 그것을 할 방법을 찾을 수 없습니다.
그래서 기본적으로 당신은이 작업을 수행 할 수 있습니다
// new Spawn.
let spawn = require('child_process');
// new ufw process.
let ufw = spawn('ufw', ['enable']);
// Use defined input.
ufw.stdin.setEncoding('utf-8');
ufw.stdout.pipe(process.stdout);
ufw.stdin.write('y\n');
// Event Standard Out.
ufw.stdout.on('data', (data) => {
console.log(data.toString('utf8'));
});
// Event Standard Error.
ufw.stderr.on('data', (err) => {
// Logerror.
console.log(err);
});
// When job is finished (with or without error) it ends up here.
ufw.on('close', (code) => {
// Check if there were errors.
if (code !== 0) console.log('Exited with code: ' + code.toString());
// End input stream.
ufw.stdin.end();
});
위의 예는 완전히 잘 작동합니다.
이
ufw.stdin.write('y\n');
대기가이 필요할 것까지 내가 여러 개의 입력을하면 어떻게됩니까 :하지만 나에게 두통을주는 2 가지가있다? 예 : '예', '예', '아니오'.stdin.write()
세 줄을 써야합니까?내가 사용하는 위치가 아닌가
ufw.stdin.write('y\n');
조금 혼란 스럽습니까? 내 프롬프트가 입력 요청을 한 후에 입력이 필요하다고 생각하여 내stdin.write()
이 올바른 시간에 실행될 수 있다는 코드를 변경하기로 결정했다. 그러나 '올바른 시간'이stdout.on('data', callback)
이벤트에 있는지 확인하는 유일한 방법입니다. 내가 프롬프트가 사용자 입력 여부에 대한 aksing 경우 알 필요가 있기 때문에 만드는 여기
// new Spawn.
let spawn = require('child_process');
// new ufw process.
let ufw = spawn('ufw', ['enable']);
// Event Standard Out.
ufw.stdout.on('data', (data) => {
console.log(data.toString('utf8'));
// Use defined input.
ufw.stdin.setEncoding('utf-8');
ufw.stdout.pipe(process.stdout);
ufw.stdin.write('y\n');
});
// Event Standard Error.
ufw.stderr.on('data', (err) => {
// Logerror.
console.log(err);
});
// When job is finished (with or without error) it ends up here.
ufw.on('close', (code) => {
// Check if there were errors.
if (code !== 0) console.log('Exited with code: ' + code.toString());
// End input stream.
ufw.stdin.end();
});
나의 주요 오해는 사용자 입력 (자동)에 stdin
을 사용할시기와 코드에 입력 할 위치를 적시하여 예를 들어 mysql_secure_installation
과 같은 입력을 여러 번 입력하는 경우와 같이 적절한시기에 사용됩니다.