Node.js内から外部プログラムを実行する方法は?


137

node.js内から外部プログラムを実行することは可能ですか?os.system()この機能を追加するPythonのライブラリまたは同等のライブラリはありますか?


child_processモジュールを使用したい。さまざまなユースケースのいくつかの明確な例を提供するドキュメントを参照してください。
Ken Rockot、2011

回答:


140
var exec = require('child_process').exec;
exec('pwd', function callback(error, stdout, stderr){
    // result
});

2
子プロセスの結果に基づいて行動するための最良の方法は何ですか。例...プロセスが終了コード0を返し、別のメソッドを呼び出したい場合、大量のエラーが発生するようです。
Continuousqa

@continuousqa-この回答は4歳です。問題がある場合は、SOに新しい質問を投稿し、必要に応じてこの質問を参照してください。
Mark Kahn

1
この記事には、の使用に関するヒントが含まれていchild_processます。
Adriano P

@JoãoPimentelFerreira-この質問は7歳です。助けが必要な場合は、新しいものを開くことをお勧めします
Mark Kahn

75

execには512kのバッファサイズのメモリ制限があります。この場合、spawnを使用することをお勧めします。spawnを使用すると、実行時に実行されたコマンドのstdoutにアクセスできます

var spawn = require('child_process').spawn;
var prc = spawn('java',  ['-jar', '-Xmx512M', '-Dfile.encoding=utf8', 'script/importlistings.jar']);

//noinspection JSUnresolvedFunction
prc.stdout.setEncoding('utf8');
prc.stdout.on('data', function (data) {
    var str = data.toString()
    var lines = str.split(/(\r?\n)/g);
    console.log(lines.join(""));
});

prc.on('close', function (code) {
    console.log('process exit code ' + code);
});

1
私はこのコードを取り、それが生成されたプロセスの出力を示すために失敗したstackoverflow.com/questions/21302350/...を
ポールVerest

1
@PaulVerest:出力はでstderrはなくにある可能性がありますstdout。私の場合、close決して来ることはありませんが...
ヒッピートレイル

1
stdinはどうですか?プロセスにデータを送信することは可能ですか?
エルナンEche

18

最も簡単な方法は次のとおりです。

const {exec} = require("child_process")
exec('yourApp').unref()

「yourApp」を待たずにプロセスを終了するには、unrefが必要です

ここにexec ドキュメントがあります


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.