使用参数调用C 的gdal_merge.py

calling gdal_merge.py from c++ with arguments

本文关键字:gdal merge py 参数 调用      更新时间:2023-10-16

我想从我的c 代码中调用gdal_merge.py脚本,然后将参数传递给该调用。从命令行调用脚本时,您可以这样做:

gdal_merge.py -n 0 -a_nodata 0 -o [someOutputFile] [inputFiles]

但是,我无法从我的C 代码中工作,因为我不知道如何将参数传递给Python脚本的主要方法。我尝试过这样的尝试:

// 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。现在,我正在努力正确地构建清单以使其正常工作

这就是我的做法:

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