Node.js에서 외부 프로그램을 실행하는 방법은 무엇입니까?


137

node.js 내에서 외부 프로그램을 실행할 수 있습니까? os.system()이 기능을 추가 하는 Python 또는 다른 라이브러리 와 동등한 기능이 있습니까?


child_process모듈 을 사용하려고 합니다. 다양한 사용 사례에 대한 몇 가지 명확한 예를 제공 하는 설명서를 참조하십시오 .
Ken Rockot

답변:


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로 제한됩니다. 이 경우 스폰을 사용하는 것이 좋습니다. 스폰 된 사람은 런타임에 실행 된 명령의 표준 출력에 액세스 할 수 있습니다

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/…
Paul Verest

1
@PaulVerest : 출력이 stderr아닌에 있을 수 있습니다 stdout. 내 경우에는 close오고 있지만 ...
hippietrail

1
stdin은 어떻습니까? 프로세스에 데이터를 보낼 수 있습니까?
Hernán Eche

18

가장 간단한 방법은 다음과 같습니다.

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

"yourApp"를 기다리지 않고 프로세스를 종료하려면 unref 가 필요합니다

여기 exec 문서가 있습니다


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.