15

我正在尝试使用该child_process.spawn功能。语法是

child_process.spawn(command, args=[], [options])

每当我在 args 数组的任何元素中包含空格时,该命令都会简单地发出参数。这是我用来测试它的一些代码

var spawn = require("child_process").spawn

console.log("This works");
var watcher = spawn("ls", ["-l"]);
watcher.stdout.on('data', function(data) {
    process.stdout.write(data.toString());
});

console.log("This does not work");
watcher = spawn("ls", ["-l", "/path with space in it"]);
watcher.stdout.on('data', function(data) {
    process.stdout.write(data.toString());
});

这是节点中的错误吗?我需要逃离这个空间吗?

编辑:上面的代码只是一个例子。这是真正的代码。也许与管道有关?

watcher = spawn("supervisor", ["--extensions\ 'coffee|js|css|coffeekup'", "src/app.coffee"]);
4

1 回答 1

32

不要在 中添加空格args,只需在数组中使用另一个参数

var watcher = spawn("supervisor", [
  "--extensions",
  "'coffee|js|css|coffeekup'",
  "src/app.coffee"
]);

如果您想从子进程中获得快速诊断输出,我发现一个方便的小捷径是{stdio: "inherit"}传入options

var watcher = spawn("supervisor", [
  "--extensions",
  "'coffee|js|css|coffeekup'",
  "src/app.coffee"
], {stdio: "inherit"});

通过这种方式,您可以立即查看一切是否正常。

最后,根据supervisor安装位置,您可能需要考虑使用完整路径。

var watcher = spawn("/path/to/supervisor", ...);
于 2013-02-05T06:23:27.227 回答