web-dev-qa-db-fra.com

Erreur fatale Python: Py_Initialize: impossible d'obtenir le codage des paramètres régionaux

J'essaie d'exécuter un script python à partir de 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 dans popen mais cela ne change rien.

Vous pouvez trouver le fichier cpp complet ici: http://Pastebin.com/KeXsgzjx Mais le reste ne concerne que le passe-partout spécifique au problème.

Le code est parfaitement compilé, mais lors de l'exécution, il génère le message d'erreur suivant:

Erreur fatale Python: Py_Initialize: impossible d'obtenir le codage des paramètres régionaux
Fichier "/home/lhk/programs/clion-2016.1.2/bin/gdb/lib/python2.7/encodings/init .py ", ligne 123 déclenche CodecRegistryError,\^ SyntaxError: syntaxe non valide

Unité d'exécution actuelle 0x00007ffff7fd1700 (l'appel le plus récent en premier): Aborted (Core Dumped)

Il y a des doublons de cette question:

Fatal Python error: Py_Initialize: Impossible d'obtenir le codage des paramètres régionaux ... SyntaxError: syntaxe non valide Aborted (core dumped)

Bash tente 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 pythonpath
  • Mon script python spécifie la version exacte avec #!/usr/bin/python3.5
  • Mon /usr/lib/command-not-found appelle explicitement /usr/bin/python3

Et il y a encore plus à ce bogue.

  1. Il semble être lié à mon IDE, Clion. Vous pouvez voir cela dans le message d'erreur. L’interprète python tente en quelque sorte de charger un script d’initialisation à partir 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, sa version 3.5 et l'interpréteur correct également.

Je suis perdu, pourquoi choisir le mauvais interprète?

3
lhk

J'ai un problème similaire dans contexte différent (lors de l'appel d'un script python3 à partir de l'environnement interactif du programme de tracé VisIt ). Cela s’explique par le fait qu’apparemment, les variables d’environnement (en particulier PATH) sont définies sur 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 table blanche env . Devrait ressembler à ceci:

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