正在尝试对混合器进行子处理。启动时崩溃 我尝试用Python脚本从C++项目运行BuldRead。为此,我使用了\u popen。它在启动时崩溃,搅拌机没有响应,但出现错误

正在尝试对混合器进行子处理。启动时崩溃 我尝试用Python脚本从C++项目运行BuldRead。为此,我使用了\u popen。它在启动时崩溃,搅拌机没有响应,但出现错误,c++,visual-studio,blender,C++,Visual Studio,Blender,我有一些子文件夹,其中生成了程序的.exe,Visual Studio配置为在该位置开始相对路径。看起来是这样的: Debug |--- MyProgram.exe | |--- blender-2.72b-windows64 | |--- Resources | |--- GenericHeadMesh.blend | |--- python | |--- global.py | |--- local.py | |--- Output std::string blender

我有一些子文件夹,其中生成了程序的.exe,Visual Studio配置为在该位置开始相对路径。看起来是这样的:

Debug
|--- MyProgram.exe
|
|--- blender-2.72b-windows64
|
|--- Resources
|    |--- GenericHeadMesh.blend
|
|--- python
|    |--- global.py
|    |--- local.py
|
|--- Output
std::string blenderPath = pH.GetBlenderPath() + "blender.exe";
std::string meshGlobalPath = pH.GetResourcesPath() + "GenericHeadMesh.blend";
std::string pythonGlobalPath = pH.GetPythonPath() + "global.py";
std::string globalCommand = "\"\"" + blenderPath + "\" --background \"" + meshGlobalPath + "\" --python \"" + pythonGlobalPath + "\" -- \"" + pH.GetOutputPath() + "\"\"";
我为命令构建了一个字符串(使相对路径成为绝对路径)

用于获取绝对路径的函数(这相当草率,但并不意味着 这是一个研究项目)

我的子峰值函数如下所示(经过一些调试):

第一个和最后一个引号用于字符串显然,每个路径都有一个转义引号来捕捉带有空格的路径,我必须在开始和结束处放置另一个转义引号,否则它甚至无法启动blender(或者至少尝试)

我需要一个接一个地对blender进行两次子处理(应用一些更改,存储结果,用这些更改计算并再次应用),所以我需要 子流程的一种方式,它实际上像popen那样等待子流程完成

路径如下所示(来自
runCommand()
的调试):

c_str():“”c:\Users\Gunnar\Documents\Visual Studio 2013\Projects\qtest\x64\Debug\blender-2.72b-windows64\blender.exe“ --背景“C:\Users\Gunnar\Documents\Visual Studio 2013\Projects\QtTest\x64\Debug\Resources\GenericHeadMesh.blend” --python“C:\Users\Gunnar\Documents\Visual Studio 2013\Projects\qtest\x64\Debug\python\global.py”-- “C:\Users\Gunnar\Documents\Visual Studio 2013\Projects\qtest\x64\Debug\Output“

_pclose()给出的退出代码为0(如果没有附加值,则为1)

(仅对
globalCommand
的调试将以三个引号开始和结束,但使用c_str()的调试仅以两个引号结束

现在,它所做的是尝试启动blender,然后在出现
blender没有响应的消息时崩溃。
如果我进行调试,我会在msvcr120.dll获得一个源代码,退出代码为3。(这可能意味着找不到路径,或者没有足够的内存,根据任务管理器,情况并非如此。)我无法获得有关此的进一步信息,无法加载此的.pdb

如果我手动在cmd提示符中键入一个等效命令,它就可以正常工作。如下所示:

Debug
|--- MyProgram.exe
|
|--- blender-2.72b-windows64
|
|--- Resources
|    |--- GenericHeadMesh.blend
|
|--- python
|    |--- global.py
|    |--- local.py
|
|--- Output
std::string blenderPath = pH.GetBlenderPath() + "blender.exe";
std::string meshGlobalPath = pH.GetResourcesPath() + "GenericHeadMesh.blend";
std::string pythonGlobalPath = pH.GetPythonPath() + "global.py";
std::string globalCommand = "\"\"" + blenderPath + "\" --background \"" + meshGlobalPath + "\" --python \"" + pythonGlobalPath + "\" -- \"" + pH.GetOutputPath() + "\"\"";
“C:\Users\Gunnar\Documents\Visual Studio 2013\Projects\qtest\x64\Debug\blender-2.72b-windows64\blender.exe“ --背景“C:\Users\Gunnar\Documents\Visual Studio 2013\Projects\QtTest\x64\Debug\Resources\GenericHeadMesh.blend” --python“C:\Users\Gunnar\Documents\Visual Studio 2013\Projects\qtest\x64\Debug\python\global.py”-- “C:\Users\Gunnar\Documents\Visual Studio 2013\Projects\qtest\x64\Debug\Output\”

我不知道是什么导致了这个问题。这是我的程序没有的一些权限吗?我可以毫无问题地将数据写入
Output
-文件夹中的.txt文件

我使用的是blender 2.72b、Visual Studio 2013和Windows 7 64位

编辑:
问题似乎与项目/其设置/其他方面有关。我创建了一个新项目作为测试,该项目运行良好:

std::string command = "\"\"C:\\Users\\Gunnar\\Documents\\Visual Studio 2013\\Projects\\QtTest\\x64\\Debug\\blender-2.72b-windows64\\blender.exe\" --background \"C:\\Users\\Gunnar\\Documents\\Visual Studio 2013\\Projects\\QtTest\\x64\\Debug\\Resources\\GenericHeadMesh.blend\" --python \"C:\\Users\\Gunnar\\Documents\\Visual Studio 2013\\Projects\\QtTest\\x64\\Debug\\python\\global.py\"  -- \"C:\\Users\\Gunnar\\Documents\\Visual Studio 2013\\Projects\\QtTest\\x64\\Debug\\Output\\\"\"";
FILE* f = _popen(command.c_str(), "r");
_pclose(f);

我不知道是什么导致了这个问题。我更改了一些设置,例如相对路径的起始位置。我已经恢复了设置,但没有改变任何内容。我想我将创建一个新项目并复制内容。该项目总体上似乎有一些问题。它在某个时候变得非常慢,有时会滞后于计算机(给出一个小的检查图标)。

要测试,请硬编码整个字符串,而不是试图通过编程来构建它。如果硬编码字符串不起作用,那么如果编写程序来构建字符串,它就不起作用。我做了一些硬编码测试,但我不确定它是否具有这种“状态”“。可能只有两个引号,明天需要测试。在更早期的版本中(硬编码,不是空格引号,原始字符串文字,没有传递到python脚本的附加参数)它正在工作,所以应该可以做到这一点。这是在另一台计算机上编写的,但这不应该是一个问题,因为blender作为正常程序执行时运行正常。好的,看起来这实际上是一个与解决方案相关的问题。我创建了一个新的解决方案,只有一个主文件来测试这一点,它可以工作。空格是一个pr但问题是。我猜项目设置中一定有问题。我注意到它在某个点(在VS中)变得非常慢,比如滞后于计算机并在底部给出了一个小的检查图标。我不知道是什么导致了这一点(如果这与此问题有关).我想我会尝试创建一个新的、空的项目,并将内容复制过来。