2016-09-04 2 views
3

nodejs 응용 프로그램에서 작업 중이고 여러 줄 문자열을 쉘 명령으로 파이프해야합니다. 나는 쉘 스크립트에서 프로 아니에요하지만 난 내 터미널에서이 명령을 실행하면 그것은 잘 작동 :javascript 변수를 nodejs를 사용하여 쉘 명령으로 파이프

$((cat $filePath) | dayone new)

은 여기가 nodejs 측에 대해 가지고거야. dayone 명령은 작동하지만 아무 것도 파이프에 연결되어 있지 않습니다.

const cp = require('child_process'); 
const terminal = cp.spawn('bash'); 

var multiLineVariable = 'Multi\nline\nstring'; 

terminal.stdin.write('mul'); 
cp.exec('dayone new', (error, stdout, stderr) => { 
    console.log(error, stdout, stderr); 
}); 
terminal.stdin.end(); 

어떤 도움을 주셔서 감사합니다!

답변

1

여기서는 spawn을 사용하여 bash를 시작하지만 exec를 사용하여 dayone 프로그램을 시작합니다. 이들은 별도의 하위 프로세스이며 어떤 방식으로도 연결되지 않습니다.

'cp'는 child_process 모듈에 대한 참조 일 뿐이며 spawn과 exec는 두 가지 다른 방법으로 자식 프로세스를 시작합니다.

bash를 사용하여 dayone 명령을 stdin에 작성하여 dayone을 호출 할 수 있습니다 (코드 단편이 시도하는 것처럼 보임). 또는 exec를 사용하여 직접 dayone을 호출 할 수도 있습니다 (exec는 여전히 명령을 실행합니다.)) 쉘에서 : Readable Streams

var multiLineVariable = 'Multi\nline\nstring'; 

// get the child_process module 
const cp = require('child_process'); 

// open a child process 
var process = cp.exec('dayone new', (error, stdout, stderr) => { 
    console.log(error, stdout, stderr); 
}); 

// write your multiline variable to the child process 
process.stdin.write(multiLineVariable); 
process.stdin.end(); 
+0

이것은 완벽하게 작동하지만 왜 확실하지 않습니다. 'stdin'에 쓰기 전에'cp.exec'를 호출하는 것은 읽을 것이 있기 전에'dayone' 명령을 실행하는 것처럼 보입니다. 'dayone' 명령이 입력을 얻는 방법을 설명 할 수 있습니까? 감사! – danseethaler

+1

exec 명령은 dayone 완료/종료를 기다리지 않고 node.js 블록에서 아무것도하지 않습니다. Exec은 프로세스를 시작하고 프로세스는 stdin에서 읽으려고 시도합니다. 사용할 수있는 것이 없다면 무언가가있을 때까지 차단 될 것이며, 우리가 프로세스를 시작하자마자 제공 할 것입니다. 명령 줄에서 손으로 명령을 실행 한 것처럼 입력 한 내용이 표준 입력에 도달 할 때까지 차단됩니다. –

+0

완벽! 정말 고마워! – danseethaler

0

당신이 표준 출력에 기록 할 수 Writable Streams으로 입력

const chunks = []; 
process.stdin.on('readable',() => { 
    const chunk = process.stdin.read() 
    chunks.push(chunk); 
    if (chunk !== null) { 
    const result = Buffer.concat(chunks); 
    console.log(result.toString()); 
    } 
}); 

을 듣고 정말 쉽게

process.stdout.write('Multi\nline\nstring'); 

잘하면 도와 드릴 수 있습니다.

관련 문제