![](/img/trans.png)
[英]Node child_process.spawn bad file descriptor on windows with ipc
[英]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
變量中(可能更容易)。
此外,傳遞給spawn
的args
數組不應包含空元素。
你的代碼應該是這樣的:
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.