node child_process.spawn不使用windows上路径中的空格

Mar*_*rco 9 node.js

如何提供路径 child_process.spawn

例如路径:

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

路径由最终用户从配置文件提供.

var child_process = require('child_process');
var path = require('path');
var pathToExecute = path.join(options.toolsPath, 'mspec.exe');
child_process.spawn(pathToExecute, options.args);
Run Code Online (Sandbox Code Playgroud)

目前只有空间使用后的部分 child_process.spawn

我还尝试在路径中添加引号,如下所示:

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

但是这会导致ENOENT错误.

Tre*_*vor 7

根据https://github.com/nodejs/node/issues/7367#issuecomment-229728704,可以使用该{ shell: true }选项。

例如

const { spawn } = require('child_process');
const ls = spawn(process.env.comspec, ['/c', 'dir /b "C:\\users\\Trevor\\Documents\\Adobe Scripts"'],  { shell: true });
Run Code Online (Sandbox Code Playgroud)

将工作。


cml*_*ndz 5

第一个参数必须是命令名称,而不是可执行文件的完整路径。有一个选项可以cwd用来指定进程的工作目录,您还可以确保可执行文件可以访问并将其添加到PATH变量中(可能更容易执行)。

另外,args传递给的数组spawn不应包含空元素。

您的代码应如下所示:

child_process.spawn('mspec.exe', options.args, {cwd: '...'});
Run Code Online (Sandbox Code Playgroud)