Node.jsでchild_process.execSyncを使ってコマンドの出力をコンソールに出力する方法(サンプルコード付き)
Node.js で child_process.execSync を使用してコンソールに出力を保持する方法
この問題を解決するには、execSync
オプションに stdio
オプションを設定する必要があります。このオプションは、子プロセスの標準入出力 (stdin、stdout、stderr) をどのように処理するかを指定します。
コンソールに出力を保持するには、stdio
オプションを 'inherit'
に設定する必要があります。これは、子プロセスの標準入出力が出力ストリームに直接送信されることを意味します。
const { execSync } = require('child_process');
const command = 'ls -al';
const options = {
stdio: 'inherit',
};
execSync(command, options);
このコードは、ls
コマンドを実行し、その出力をコンソールに出力します。
その他の stdio オプション値:
'pipe'
: 子プロセスの標準入出力はパイプに接続されます。
例:
- コマンドの出力を変数に保存するには、
stdio
オプションを'pipe'
に設定し、パイプから出力を読み取ることができます。
const { execSync } = require('child_process');
const command = 'ls -al';
const options = {
stdio: 'pipe',
};
const output = execSync(command, options).toString();
console.log(output);
const { execSync } = require('child_process');
const command = 'ls -al > output.txt';
const options = {
stdio: 'ignore',
};
execSync(command, options);
注意事項:
execSync
は同期的に実行されるため、コマンドの実行が完了するまでプログラムはブロックされます。execSync
は、コマンドラインツールの実行にのみ使用できます。JavaScript コードを実行するには、eval
またはvm
モジュールを使用する必要があります。
const { execSync } = require('child_process');
// コマンド
const command = 'ls -al';
// オプション
const options = {
stdio: 'inherit',
};
// コマンドを実行
execSync(command, options);
このコードを実行すると、ls
コマンドの出力がコンソールに出力されます。
その他のサンプルコード:
- コマンドの出力を変数に保存する:
const { execSync } = require('child_process');
// コマンド
const command = 'ls -al';
// オプション
const options = {
stdio: 'pipe',
};
// コマンドを実行
const output = execSync(command, options).toString();
// 出力を出力
console.log(output);
const { execSync } = require('child_process');
// コマンド
const command = 'ls -al > output.txt';
// オプション
const options = {
stdio: 'ignore',
};
// コマンドを実行
execSync(command, options);
child_process.exec
は、execSync
と似ていますが、非同期的に実行されます。これは、コマンドの実行中に他の処理を実行できることを意味します。
const { exec } = require('child_process');
// コマンド
const command = 'ls -al';
// コマンドを実行
exec(command, (error, stdout, stderr) => {
// エラー処理
if (error) {
console.error(error);
return;
}
// 出力処理
console.log(stdout);
});
child_process.spawn
は、より低レベルな方法で子プロセスを作成します。これにより、子プロセスの入出力ストリームをより細かく制御できます。
const { spawn } = require('child_process');
// コマンド
const command = 'ls';
// 引数
const args = ['-al'];
// 子プロセスを作成
const child = spawn(command, args);
// 出力処理
child.stdout.on('data', (data) => {
console.log(data.toString());
});
サードパーティライブラリ
node-cmd
や commander
などのサードパーティライブラリを使用して、コマンドラインツールを実行することもできます。これらのライブラリは、child_process
モジュールよりも使いやすく、多くの場合、追加機能を提供します。
const cmd = require('node-cmd');
// コマンド
const command = 'ls -al';
// コマンドを実行
cmd.run(command);
- 简单的なコマンドを実行する場合は、
execSync
またはexec
が最も簡単な方法です。 - コマンドの実行中に他の処理を実行したい場合は、
exec
を使用する必要があります。 - 子プロセスの入出力ストリームをより細かく制御したい場合は、
spawn
を使用する必要があります。 - 使いやすく、追加機能を提供するライブラリが必要場合は、サードパーティライブラリを使用することを検討してください。
node.js child-process