it-swarm.com.de

Schwerwiegender Python -Fehler: Py_Initialize: Die Codierung des Gebietsschemas kann nicht abgerufen werden

Ich versuche, ein python Skript von C++ aus auszuführen, indem ich popen(). aufrufe

Der wichtige Code sieht folgendermaßen aus:

ostringstream command;
command<<"cd ; python3 piap.py "<<u<<" "<<rho;
if(!(in = popen(command.str().c_str(), "r"))){
    cout<<"some problem with the subprocess"<<endl;
}

Ich habe auch versucht, python3.5 in popen aufzurufen, aber das ändert nichts.

Die gesamte cpp-Datei finden Sie hier: http://Pastebin.com/KeXsgzjx Der Rest ist jedoch nur ein problemspezifisches Boilerplate.

Der Code wird einwandfrei kompiliert, erzeugt jedoch zur Laufzeit die folgende Fehlermeldung:

Schwerwiegender Python -Fehler: Py_Initialize: Die Codierung des Gebietsschemas kann nicht abgerufen werden
Datei "/home/lhk/programs/clion-2016.1.2/bin/gdb/lib/python2.7/encodings/init.py", Zeile 123 raise CodecRegistryError,\^ SyntaxError: ungültige Syntax

Aktueller Thread 0x00007ffff7fd1700 (letzter Aufruf zuerst): Abgebrochen (Core Dump)

Es gibt Duplikate dieser Frage:

Schwerwiegender Python -Fehler: Py_Initialize: Die Codierung des Gebietsschemas konnte nicht abgerufen werden ... SyntaxError: Ungültige Syntax Abgebrochen (Core Dump

Bash versucht, python mit unbekanntem Befehl auszuführen und Py_Initialize schlägt fehl

Leider funktionieren die Lösungen bei mir nicht:

  • Ich habe Pythonpath nicht festgelegt
  • Mein python Skript gibt die genaue Version mit #!/usr/bin/python3.5 an
  • Mein /usr/lib/command-not-found ruft /usr/bin/python3 explizit auf

Und dieser Bug hat noch mehr zu bieten.

  1. Es scheint mit meiner IDE, Clion, verwandt zu sein. Sie können das in der Fehlermeldung sehen. Irgendwie versucht der python -Interpreter, ein Init-Skript aus der Clion-Distribution zu laden
  2. Es wird nur während des Debuggens angezeigt. Im Release-Modus funktioniert der Aufruf von popen () einwandfrei.

Ich habe überprüft, welche python -Version in Clion als Standard konfiguriert ist, es ist 3.5, und auch der richtige Interpreter.

Ich bin ratlos, warum wurde der falsche Dolmetscher ausgewählt?

3
lhk

Ich habe ein ähnliches Problem in einem anderen Kontext (beim Aufrufen eines Python3-Skripts aus der interaktiven Umgebung des Plot-Programms VisIt ). Dies liegt anscheinend daran, dass die Umgebungsvariablen (insbesondere PATH) auf lokale Werte gesetzt sind, die die systemweite Installation von Python3 deaktivieren.

Sie können dies umgehen, indem Sie Python 3 in einem clean-slate env ausführen. Sollte ungefähr so ​​aussehen:

ostringstream command;
command<<"cd ; env -i bash -l -c 'python3 piap.py "<<u<<" "<<rho<<"'";
if(!(in = popen(command.str().c_str(), "r"))){
    cout<<"some problem with the subprocess"<<endl;
}
2
leftaroundabout