2017-05-03 8 views
0

child_process 모듈의 노드 spawn/exec 함수를 사용하려고합니다. 그러나 나는 실제 터미널과 커맨드 라인에서 보이는 것과 이상한 차이점을 발견했다.노드 child_process가 stdout에 모든 것을 쓰지 않습니다.

터미널 : Node.js를에서

$ redis-cli 
127.0.0.1:6379> hmset hash name Jack age 33 
OK 
127.0.0.1:6379> hscan hash 0 
1) "0" 
2) 1) "name" 
    2) "Jack" 
    3) "age" 
    4) "33" 

:

const child = exec("redis-cli"); 
child.stdin.setDefaultEncoding("utf-8"); 
child.stdout.on("data", data => console.log(data.toString())); 

child.stdin.write("hmset hash name Jack age 33\n"); // same as first command from cli example 

await new Promise(r => setTimeout(r, 1000)); 

child.stdin.write("hscan hash 0\n"); // same as second command from cli example 

await new Promise(r => setTimeout(r, 1000)); 

이 콘솔에 기록됩니다 것입니다 예를 들면 다음과 같습니다이다이 경우

OK 

0 
name 
Jack 
age 
33 

는 숫자 1), 2) 등이 없습니다. child_process도 콘솔에 쓰도록 설득 할 수있는 아이디어가 있습니까? 이 특정 예제는 redis-cli이 구현 된 방법의 단점이지만 데이터는 반드시 일부가 인 곳으로 가야합니다.

await new Promise(...) 호출은이 간단한 예제에서 이전 명령이 완료되었는지 확인하기위한 것입니다.

답변

0

흔히 그렇듯이 질문을 게시 한 후 1 분 내에이를 알아 냈습니다.

redis-cli은 표준 출력이 터미널인지 확인합니다. 이 문제는 대신

const child = exec("redis-cli"); 

RTFM

const child = exec("redis-cli --no-raw"); 

를 사용함으로써 해결된다.