web-dev-qa-db-ja.com

Node.JSで生成されたchild_processの出力を取得するにはどうすればよいですか?

まず第一に、私は完全な初心者であり、昨日Node.JSを使い始めました(これは数年ぶりにLinuxを使用したことでもあります)ので、素晴らしく明確にしてください

私は現在、とりわけシェルコマンドを起動する必要があるNode.JSプログラムを作成しています(主に:usbドライブをマウントします)。私は現在使用しています

var spawn = require('child_process').spawnSync;

function shspawn(command) {
    spawn('sh', ['-c', command], { stdio: 'inherit' });
}

shspawn('echo Hello world');
shspawn('mkdir newdir');

など、これは私にとって本当に快適な方法です。問題は、たとえば「ls」コマンドの出力を次のような方法で変数に格納したいということです。

var result = shspawn('ls -l')

私はいくつかの例をオンラインで読んだことがありますが、それらはスポーンを使用することはめったになく、使用する場合は機能しません(私は何か間違ったことをするかもしれませんが、私はノードの初心者です)

Child_process_spawnSyncを使用するよりも良いアイデアがあれば、私はどんなアイデアでも構いませんが、プログラムをパッケージフリーに保つためにできるだけ長くしたいと思います:)

編集:同期して動作する必要があります!そのため、spawnSyncを使い始めました。ddなどのコマンドを使用します。時間がかかり、プログラムが別のコマンドに進む前に完全に終了する必要があります。

10
Squiller

以下のようにできます。

    var spawn = require('child_process').spawn;
    // Create a child process
    var child = spawn('ls' , ['-l']);

    child.stdout.on('data',
        function (data) {
            console.log('ls command output: ' + data);
        });
    child.stderr.on('data', function (data) {
        //throw errors
        console.log('stderr: ' + data);
    });

    child.on('close', function (code) {
        console.log('child process exited with code ' + code);
    });

更新:spawnSyncを使用

    var spawn = require('child_process').spawnSync;
    var child = spawn('ls' , ['-l','/usr']);
    console.log('stdout here: \n' + child.stdout);
12
Deendayal Garg