J'essaie d'exécuter un script Python depuis C++ en appelant popen().
Le code important ressemble à ceci :
ostringstream command;
command<<"cd ; python3 piap.py "<<u<<" "<<rho;
if(!(in = popen(command.str().c_str(), "r"))){
cout<<"some problem with the subprocess"<<endl;
}
J'ai aussi essayé d'appeler python3.5
en popen
mais ça ne change rien.
Vous pouvez trouver le fichier cpp complet ici : http://pastebin.com/KeXsgzjx Mais le reste n'est que du réchauffé spécifique au problème.
Le code se compile très bien, mais pendant l'exécution, il produit ce message d'erreur :
Erreur fatale de Python : Py_Initialize : Impossible d'obtenir l'encodage de la locale
Fichier "/home/lhk/programmes/clion-2016.1.2/bin/gdb/lib/python2.7/encodages/ init .py", ligne 123 raise CodecRegistryError,\ ^ SyntaxError : syntaxe invalideFil actuel 0x00007ffff7fd1700 (appel le plus récent en premier) : Abandonné (noyau vidé)
Il existe des doublons de cette question :
Bash essaie d'exécuter Python sur une commande inconnue et échoue dans Py_Initialize
Malheureusement, les solutions ne fonctionnent pas pour moi :
- Je n'ai pas défini le chemin de python
- Mon script Python spécifie la version exacte avec
#!/usr/bin/python3.5
- Mon
/usr/lib/command-not-found
explic explic explic explic explic explic explic/usr/bin/python3
Et il y a encore plus de choses dans ce bug.
- Il semble que ce soit lié à mon IDE, Clion. Vous pouvez le voir dans le message d'erreur. D'une manière ou d'une autre, l'interpréteur Python tente de charger un init script de la distribution clion
- Il n'apparaît que pendant le débogage. Lorsqu'il est exécuté en mode release, l'appel popen() fonctionne parfaitement.
J'ai vérifié quelle version de Python était configurée par défaut dans Clion, c'est 3.5, et l'interpréteur correct, aussi.
Je suis perdu, pourquoi le mauvais interprète est-il choisi ?