2017-05-03 4 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"); 

を使用することによって解決されます。

関連する問題