【问题标题】:nodeJS child_process.spawn does not work when one of the args has a space in it当其中一个参数中有空格时,nodeJS child_process.spawn 不起作用
【发布时间】:2013-02-05 14:23:27
【问题描述】:

我正在尝试使用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"]);

【问题讨论】:

  • 在 REPL 中的 Linux 上使用 Node 0.6.17 对我来说似乎可以正常工作。在根级别创建了一个同名目录,并使用了您的代码。
  • 也从文件中工作。您能否提供更多信息,例如 Node 版本和操作系统?
  • 你运行的是什么版本的节点?
  • 我刚刚从源代码重建到版本 0.6.19,我正在运行 linux。
  • 应该编辑问题。 spawn("ls", ["-l", "/path with space in it"]) 按预期工作; spawn("supervisor", ["--extensions 'coffee|js|css|coffeekup'", "src/app.coffee"]) 未按 OP 预期工作。

标签: javascript node.js


【解决方案1】:

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

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

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

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

这样您就可以立即查看是否一切正常。

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

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

【讨论】:

  • 你知道是否可以在 spawn 调用中使用命令替换?类似docker rm $(docker ps -a)
  • 这是 bash。您为此使用“exec”:child_process.exec('rm $(docker ps -a)', {shell: '/bin/bash'}, console.log).
  • 文件扩展名周围需要单引号吗?
猜你喜欢
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
  • 1970-01-01
相关资源
最近更新 更多