2013-02-19 1 views
1

Я не мог заставить PyRun_SimpleFile работать (проблема совместимости FILE *) для файлов, которые имеют unicode (widechar) в их имени/пути и, следовательно, этот вопрос!Ошибка PyRun_SimpleString для def foo():

Итак, я решил открыть скрипт python сам &, а затем выполнить каждую строку с помощью PyRun_SimpleString.

Псевдокод показан здесь.

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

Над дает ошибку при утверждении четкости ниже (< - показано ниже)

Python версии 2,7

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

Я хотел бы использовать это, чтобы показать номер строки скрипт, где if/it не работает. Многие другие люди, похоже, успешно работают с PyRun_SimpleString!

Заранее спасибо.

+1

PyRun_SimpleString ожидает полную исходный код строки, а не одна линии от нее. –

ответ

3

В этом случае вы не будете использовать PyRun_SimpleString, потому что он ожидает, что прочитает всю программу в одной строке, вы разбиваете ее на несколько строк.

Вы должны просто использовать PyRun_SimpleFile(fileReference, scriptPath)

Примечания: вам нужно создать глобал и местные объекты для выше работы.

See this

+0

Проблема PWScriptName - wchar_t *. Я обновил вопрос. Но, как уже упоминалось, я не могу заставить PyRun_SimpleFile работать с файловыми файлами с широкими символами в их пути/имени. – sambha

+0

Вы не передадите wchar_t * в этом случае, вам нужно дать ему (fp, scriptPath) –

+0

Я знаю. Все API-интерфейсы PyRun, которые принимают FILE * в качестве аргумента для меня, потому что структуры FILE VC2010 и Python не совпадают. Это хорошо документированная проблема, особенно для окон. – sambha

Смежные вопросы