child_process를 사용합니다.execSync지만 출력은 콘솔에 유지
저는 그것을 사용하고 싶습니다.execSync
메서드는 NodeJS 0.12에서 추가되었지만 여전히 Node 스크립트를 실행한 콘솔 창에 출력이 있습니다.
예: 노드를 실행하는 경우다음 행이 있는 JS 스크립트 콘솔 내부의 rsync 명령 "live"의 전체 출력을 보고 싶습니다.
require('child_process').execSync('rsync -avAXz --info=progress2 "/src" "/dest"');
이해는 합니다.execSync
명령 출력을 반환하고 실행 후 콘솔에 출력할 수 있지만 이렇게 하면 "실시간" 출력이 없습니다...
원하는 경우 부모의 stdio를 자식 프로세스에 전달할 수 있습니다.
require('child_process').execSync(
'rsync -avAXz --info=progress2 "/src" "/dest"',
{stdio: 'inherit'}
);
간단히 사용할 수 있습니다..toString()
.
var result = require('child_process').execSync('rsync -avAXz --info=progress2 "/src" "/dest"').toString();
console.log(result);
편집: 이를 돌이켜보면 명령 실행이 완료된 후에만 출력이 '실시간'으로 표시되지 않기 때문에 실제로는 특정 질문에 답하지 않는다는 것을 알게 되었습니다.
하지만 실행 후 명령 결과를 인쇄하는 방법을 찾는 사람들이 꽤 많다는 것을 알고 있기 때문에 이 답변을 여기에 남깁니다.
승인된 답변에 따라 stdout 및 stderr을 리디렉션하지 않는 한 execSync 또는 snaSync에서는 이 작업이 불가능합니다.stdout 및 stderr을 리디렉션하지 않고 명령이 완료된 경우에만 stdout 및 stderr을 반환합니다.
stdout 및 stderr을 리디렉션하지 않고 이를 수행하려면 sna를 사용해야 하지만 매우 간단합니다.
var spawn = require('child_process').spawn;
//kick off process of listing files
var child = spawn('ls', ['-l', '/']);
//spit stdout to screen
child.stdout.on('data', function (data) { process.stdout.write(data.toString()); });
//spit stderr to screen
child.stderr.on('data', function (data) { process.stdout.write(data.toString()); });
child.on('close', function (code) {
console.log("Finished with code " + code);
});
저는 당신이 빠르게 테스트할 수 있도록 파일을 재귀적으로 나열하는 ls 명령을 사용했습니다.스판은 첫 번째 인수로 실행하려는 실행 파일 이름을 사용하고 두 번째 인수로 해당 실행 파일에 전달할 각 매개 변수를 나타내는 문자열 배열을 사용합니다.
그러나 execSync를 사용하도록 설정되어 있고 어떤 이유로 stdout 또는 stderr을 리디렉션할 수 없는 경우 xterm과 같은 다른 터미널을 열고 다음과 같은 명령을 전달할 수 있습니다.
var execSync = require('child_process').execSync;
execSync("xterm -title RecursiveFileListing -e ls -latkR /");
이렇게 하면 새 터미널에서 명령이 수행 중인 작업을 확인할 수 있지만 동기식 호출은 계속 사용할 수 있습니다.
단순:
try {
const cmd = 'git rev-parse --is-inside-work-tree';
execSync(cmd).toString();
} catch (error) {
console.log(`Status Code: ${error.status} with '${error.message}'`;
}
참조: https://stackoverflow.com/a/43077917/104085
// nodejs
var execSync = require('child_process').execSync;
// typescript
const { execSync } = require("child_process");
try {
const cmd = 'git rev-parse --is-inside-work-tree';
execSync(cmd).toString();
} catch (error) {
error.status; // 0 : successful exit, but here in exception it has to be greater than 0
error.message; // Holds the message you typically want.
error.stderr; // Holds the stderr output. Use `.toString()`.
error.stdout; // Holds the stdout output. Use `.toString()`.
}
명령이 성공적으로 실행될 때:
더하다{"encoding": "utf8"}
옵션으로
execSync(`pwd`, {
encoding: "utf8"
})
언급URL : https://stackoverflow.com/questions/30134236/use-child-process-execsync-but-keep-output-in-console
'programing' 카테고리의 다른 글
Angular에서 템플릿의 변수를 선언하는 방법 (0) | 2023.05.26 |
---|---|
PostgreSql 데이터베이스의 소유자를 변경하는 방법은 무엇입니까? (0) | 2023.05.26 |
IntelliJ IDEA를 통한 Git:원격 리포지토리에서 읽을 수 없습니다. (0) | 2023.05.26 |
정적 셀로 설정된 UITableView입니다.프로그래밍 방식으로 일부 셀을 숨길 수 있습니까? (0) | 2023.05.26 |
확인란의 레이블에 대한 jQuery 선택기 (0) | 2023.05.26 |