正在尝试对混合器进行子处理。启动时崩溃 我尝试用Python脚本从C++项目运行BuldRead。为此,我使用了\u popen。它在启动时崩溃,搅拌机没有响应,但出现错误
我有一些子文件夹,其中生成了程序的.exe,Visual Studio配置为在该位置开始相对路径。看起来是这样的:正在尝试对混合器进行子处理。启动时崩溃 我尝试用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
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中)变得非常慢,比如滞后于计算机并在底部给出了一个小的检查图标。我不知道是什么导致了这一点(如果这与此问题有关).我想我会尝试创建一个新的、空的项目,并将内容复制过来。