簡體   English   中英

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

[英]node child_process.spawn not working with spaces in path on windows

如何提供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);

目前, 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);

但是,這會導致ENOENT錯誤。

第一個參數必須是命令名,而不是可執行文件的完整路徑。 有一個名為cwd的選項可以指定進程的工作目錄,也可以確保可執行文件可以將其添加到PATH變量中(可能更容易)。

此外,傳遞給spawnargs數組不應包含空元素。

你的代碼應該是這樣的:

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

我經常使用spawn ,我解決問題的方法是使用process.chdir 因此,如果您的路徑是c:\\users\\marco\\my documents\\project\\someexecutable那么您應該執行以下操作:

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

注意double \\ s,這就是它對我有用的方式。

根據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 });

將工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM