使用参数从c ++调用gdal_merge.py

时间:2017-06-02 12:18:27

标签: python c++ arguments boost-python

我想从我的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。现在,我正在努力正确构建列表以使其正常工作

1 个答案:

答案 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);
}