Ich möchte das Skript gdal_merge.py aus meinem C++ Code aufrufen und Argumente an diesen Aufruf übergeben. Wenn das Skript über die Befehlszeile aufrufen, können Sie es wie folgt tun:
Aufruf von gdal_merge.py aus C++ mit Argumenten
gdal_merge.py -n 0 -a_nodata 0 -o [someOutputFile] [inputFiles]
Allerdings kann ich den Anruf nicht bekommen von meinem C++ Code zu arbeiten, weil ich weiß nicht, wie die Argumente der zu übergeben Hauptmethode des Python-Skripts. Ich habe es so versucht:
// 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();
}
Dieser den Fehler wirft:
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
Ich habe auch ein Zeichen versucht * Array anstelle der Zeichenfolge:
const char* arguments[] = {"-n", "0", "-a_nodata", "0", "-of", "GTiff", "-o", outputFile.c_str(), inputFiles.c_str()};
Aber das wirft den Fehler:
No to_python (by-value) converter found for C++ type: char const* [9]
Wie soll ich diese Argumente übergeben, damit es funktioniert?
UPDATE: Ok, ich habe weiter boost::python::list
mit bekam. Nun, ich kämpfen, um die Liste mit dem Bau richtig, damit es funktioniert