当其中一个参数有一个空格时,nodeJS child_process.spawn不起作用

我正在尝试使用child_process.spawn函数。 语法是

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

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

 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()); }); 

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

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

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

不要在args放入空格,只需在数组中使用另一个参数即可

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

我发现一个方便的小捷径,如果你想从你的subprocess得到快速的诊断输出,在options传递{stdio: "inherit"}

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

这样你就可以看到是否一切正常工作马上。

最后,取决于supervisor的安装位置,您可能需要考虑使用完整path。

 var watcher = spawn("/path/to/supervisor", ...);