2017-06-02 1 views
0

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

Antwort

0

Dies ist, wie ich es tat:

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