节点child_process.spawn不能在窗口的path中使用空格

如何提供一个到child_process.spawn的path

例如path:

c:\users\marco\my documents\project\someexecutable

该path由最终用户从configuration文件提供。

 var child_process = require('child_process'); var path = require('path'); var pathToExecute = path.join(options.toolsPath, 'mspec.exe'); child_process.spawn(pathToExecute, options.args); 

目前只有空间之后的部分被child_process.spawn

我也尝试通过在这样的path上添加引号:

 var child_process = require('child_process'); var path = require('path'); var pathToExecute = path.join(options.toolsPath, 'mspec.exe'); child_process.spawn('"' + pathToExecute + '"', options.args); 

但是这会导致ENOENT错误。

第一个参数必须是命令名称,而不是可执行文件的完整path。 有一个叫cwd的选项来指定进程的工作目录,也可以确保可执行文件可以被添加到你的PATHvariables(可能更容易)。

此外,传递给spawnargs数组不应该包含空元素。

你的代码应该看起来像这样:

 child_process.spawn('mspec.exe', options.args, {cwd: '...'}); 

我经常使用spawn ,我解决问题的方式是使用process.chdir 。 所以如果你的path是c:\users\marco\my documents\project\someexecutable那么你应该做以下几点:

 process.chdir('C:\\users\\marco\\my documents\\project'); child_process.spawn('./myBigFile.exe', options.args); 

请注意double \ s,这就是它对我的工作原理。