我需要通过spawn通过Blender进行命令行访问,但仍会遇到ENOENT错误,很难查明缺少的内容。在示例应用程序中传递的命令行可在终端中使用。

以下是有关环境和我正在使用的示例脚本的一些详细信息。



环境(OSX El Capitan)


安装Blender 2.76b具有:

brew install Caskroom/cask/blender
然后将alias添加到bash_profile以进行终端访问:

alias blender="/Applications/blender/Blender.app/Contents/MacOS/blender"


测试码

#!/usr/bin/env node
var child_process = require('child_process');
var arguments = [
        '-b',
        'recipe.blend',
        '-o', 'test-#',
        '-f', 0
];
console.log("values: ", arguments);
var child = child_process.spawn('blender', arguments);

child.stdout.on('data', function(data) {
    console.log('data out: ', data.toString());
});
child.stderr.on('data', function(data) {
    console.error('error out: ',data);
});
child.on('close', function(code) {
    console.log('closing code: ' + code);
});

// Raw command-line for terminal. (PASS)
// blender -b recipe.blend -o test-# -f 0

最佳答案

尝试更改child_process.spawn('blender',arguments);一行到child_process.spawn('/ Applications / blender / Blender.app / Contents / MacOS / blender',arguments);。 NodeJS不会使用您的bash别名,因此,除非Blender可执行文件位于其PATH中,否则它将无法找到该可执行文件,并且会抛出ENOENT。

另一个选项是调整Node的PATH以包括Blender可执行文件的路径。您也可以将完整路径作为环境变量传递给Blender可执行文件。

干杯!

关于node.js - Blender命令行的Node.js生成吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34602573/

10-13 07:32