我正在尝试使用模块中的节点spawn
/exec
功能child_process
。但我注意到我在真实终端和命令行中看到的内容之间存在奇怪的差异。这是一个例子:
终端:
$ 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"
在 node.js 中:
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(...)
调用只是为了确保完成这个简单示例的前一个命令。