2013-02-19 1 views
1

Je ne pouvais pas faire fonctionner PyRun_SimpleFile (problème de compatibilité FICHIER *) pour les fichiers qui ont unicode (widechar) dans leur nom/chemin d'accès et donc cette question!PyRun_SimpleString échoue pour def foo():

J'ai donc décidé d'ouvrir moi-même le script python & puis d'exécuter chaque ligne en utilisant PyRun_SimpleString.

Pseudo-code représenté ici.

wchar_t* pWScriptName=NULL; 
// pWScriptName malloced & populated here 
FILE* fp = _wfopen(pWScriptName, L"r"); 
while (fgets(line, BUFSIZ, fp) != NULL) { 
    int ret = PyRun_SimpleString(line); 
    if(ret != 0) { 
     ... error at lineNum ... 
    } 
    lineNum++; 
} 

ci-dessus donne une erreur à l'instruction def ci-dessous (< - ci-dessous)

Python version est 2,7

import os 
print "hello" 
def foo(): # <-- PyRun_SimpleString fails here 
    print "hello again" 

Je voudrais l'utiliser pour afficher le numéro de ligne du script où if/it échoue. Beaucoup d'autres personnes semblent réussir avec PyRun_SimpleString!

Merci d'avance.

+1

PyRun_SimpleString attend une chaîne de code source complet, pas une seule ligne de celui-ci. –

Répondre

3

Vous n'utiliserez pas PyRun_SimpleString dans ce cas car il s'attend à lire l'intégralité du programme sur une ligne, vous le divisez en plusieurs lignes.

Vous devez simplement utiliser PyRun_SimpleFile(fileReference, scriptPath)

Note: vous devez créer les objets et les habitants GLOBALS au-dessus de travailler.

See this

+0

Le problème est que PWScriptName est wchar_t *. J'ai mis à jour la question. Mais comme je l'ai mentionné, je ne suis pas en mesure d'obtenir PyRun_SimpleFile travaillant pour le fichier raser les caractères larges dans leur chemin/nom. – sambha

+0

Vous ne passez pas le wchar_t * dans ce cas, vous devez le donner (fp, scriptPath) –

+0

Je sais. Toutes les API PyRun qui prennent FILE * en tant qu'argument font crasher pour moi car les structures FILE de VC2010 et Python ne correspondent pas. Ceci est un problème bien documenté en particulier pour les fenêtres. – sambha

Questions connexes