python c api PyRun_SimpleFile не дает желаемого результата

#python #c

Вопрос:

Я пытаюсь запустить простой файл py в dev c .

     /// **main file**

    string script_name = "example.py"
    char* script_name2 = new char[script_name.length()   1];
    
    strcpy(script_name2,  script_name.c_str());

    FILE* file_pointer;
    Py_Initialize();

    file_pointer = fopen(script_name2,"r");
    
    if (file_pointer == NULL)
    {
        PyErr_Print();
        cout << "Cannot read file -> " << script_name2 << " ... exiting" << "n";
        exit(0);
    }

    cout << file_pointer;
    
    PyRun_SimpleFile(file_pointer, script_name2);

 

example.py

 print("My Name is TUTANKHAMEN")

 

Указатель на файл не равен нулю и выводит адрес.
example.py находится в той же папке, содержащей main.cpp

Приведенная ниже инструкция работает нормально и выводит вывод на консоль.

     Py_Initialize();
    PyRun_SimpleString("import examplen");
    Py_Finalize();


 

Комментарии:

1. Каков результат и что происходит с фиаско script_name2? какова ваша операционная система? docs.python.org/3/c-api/veryhigh.html#c.PyRun_SimpleFileExFlags (серая записка).

2.Если вы работаете в Windows, вам нужно открыть файл в двоичном режиме. (См. Примечание PyRun_SimpleFileExFlags здесь.)

3. пожалуйста, игнорируйте имя скрипта2. ОС-это windows. Я подозреваю, что это как-то связано с дополнительными зависимостями.

4. На заметку, которую вы можете передать script_name.c_str() непосредственно fopen , вам не нужно ее копировать.

5. Открытие в двоичном режиме : «fopen(script_name2,»rb»); » не работает.

Ответ №1:

Сценарий отлично работает в Visual Studio 2019.

Но в Dev C :

file_pointer = _Py_fopen(имя скрипта2, «r»);

Это делает свое дело.