节点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
的选项来指定进程的工作目录,也可以确保可执行文件可以被添加到你的PATH
variables(可能更容易)。
此外,传递给spawn
的args
数组不应该包含空元素。
你的代码应该看起来像这样:
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,这就是它对我的工作原理。