【发布时间】:2016-12-28 13:58:24
【问题描述】:
我有一个字符串形式的脚本,我想在 Node.js 子进程中执行。
数据如下:
const script = {
str: 'cd bar && fee fi fo fum',
interpreter: 'zsh'
};
通常情况下,我可以使用
const exec = [script.str,'|',script.interpreter].join(' ');
const cp = require('child_process');
cp.exec(exec, function(err,stdout,sterr){});
但是,cp.exec 缓冲 stdout/stderr,我希望能够将 stdout/stderr 流式传输到任何地方。
有谁知道是否有办法以某种方式将cp.spawn 与generic 字符串一起使用,就像您可以使用cp.exec 一样?我想避免将字符串写入临时文件,然后使用 cp.spawn 执行该文件。
cp.spawn 将与字符串一起使用,但前提是它具有可预测的格式 - 这是针对库的,因此它需要非常通用。
...我只是想到了一些事情,我猜最好的方法是:
const n = cp.spawn(script.interpreter);
n.stdin.write(script.str); // <<< key part
n.stdout.setEncoding('utf8');
n.stdout.pipe(fs.createWriteStream('./wherever'));
我会尝试一下,但也许有人有更好的主意。
downvoter:你没用
【问题讨论】:
-
omg 荒谬的反对票,谢谢
标签: node.js bash zsh child-process