我想从我的c ++代码中调用gdal_merge.py脚本并将参数传递给该调用。从命令行调用脚本时,您可以这样做:
gdal_merge.py -n 0 -a_nodata 0 -o [someOutputFile] [inputFiles]
但是,我无法通过我的c ++代码调用该调用,因为我不知道如何将参数传递给python脚本的main方法。 我试过这样的话:
// this is where the gdal_merge.py script is located
setenv("PYTHONPATH", "/usr/bin/", 1);
// Initialize Python.
Py_Initialize();
namespace python = boost::python;
try {
python::object gdal_merge_modul = python::import("gdal_merge");
std::string arguments = "-n 0 -a_nodata 0 -of GTiff -o";
arguments = arguments.append(outputFile);
arguments = arguments.append(inputFiles);
arguments = arguments.append(outputFile).append(",").append(inputFiles);
gdal_merge_modul.attr("main")(arguments);
}catch(const python::error_already_set&)
{
PyErr_Print();
}
这会引发错误:
Traceback (most recent call last):
File "/usr/bin/gdal_merge.py", line 313, in main
argv = gdal.GeneralCmdLineProcessor( argv )
File "/usr/lib/python2.7/dist-packages/osgeo/gdal.py", line 2959, in GeneralCmdLineProcessor
return _gdal.GeneralCmdLineProcessor(*args)
TypeError: not a sequence
我也尝试过char *数组而不是字符串:
const char* arguments[] = {"-n", "0", "-a_nodata", "0", "-of", "GTiff", "-o", outputFile.c_str(), inputFiles.c_str()};
但这引发了错误:
No to_python (by-value) converter found for C++ type: char const* [9]
我应该如何传递这些参数才能使其有效?
更新:
好的,我进一步使用boost::python::list
。现在,我正在努力正确构建列表以使其正常工作
答案 0 :(得分:0)
我是这样做的:
python::list args;
args.append("-n"); args.append("0"); args.append("-a_nodata"); args.append("0"); args.append("-of"); args.append("GTiff");
args.append("-o"); args.append(outputFile);
for(std::string file : filePaths)
{
args.append(file);
}