3 votes

Erreur fatale de Python : Py_Initialize : Impossible d'obtenir l'encodage de la locale

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 invalide

Fil actuel 0x00007ffff7fd1700 (appel le plus récent en premier) : Abandonné (noyau vidé)

Il existe des doublons de cette question :

Erreur fatale de Python : Py_Initialize : Impossible d'obtenir l'encodage de la locale ... SyntaxError : invalid syntax Aborted (core dumped)

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.

  1. 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
  2. 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 ?

2voto

leftaroundabout Points 756

J'ai un problème similaire dans un contexte différent (lors de l'appel d'un script python3 à partir de l'environnement interactif de l'application VisIt programme de traçage). La raison pour laquelle cela se produit est qu'apparemment, les variables d'environnement (en particulier, PATH ) sont définis comme des valeurs locales qui désactivent l'installation de Python3 à l'échelle du système.

Vous pouvez contourner ce problème en exécutant Python 3 dans un fichier de type clean-slate env . Cela devrait ressembler à quelque chose comme ça :

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X