Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Не запускается runpython

Страниц (1): [1]
 

1. asterka - 27 Мая, 2023 - 14:57:37 - перейти к сообщению
Привет. При использовании runpython он почему-то не хочет запускаться. Зависает на секунд восемь и вылетает. Я пробовал заново скачивать Kibor, отключал антивирус и запускать Kibor от имени администратора. Не помогает. Использую Windows 11 Pro. В чём может быть проблема?


Как проверяю запуск (Отобразить)
2. Kibor - 28 Мая, 2023 - 02:18:33 - перейти к сообщению
Запустите питон сам по себе. Возможно нет нужных dll
3. Zireael - 28 Мая, 2023 - 12:28:44 - перейти к сообщению
Этот код выполнится?
Код запускает интерпретатор, передает такой код:
CODE:
x = 123
y = 40
print(x+y)

и получает ответ 163.
CODE:
#define STARTF_USESHOWWINDOW 1
#define STARTF_USESTDHANDLES 256
#define SW_HIDE 0
#define INFINITE -1
#define NULL 0
external(INT, "CreatePipe", "CreatePipe", "kernel32.dll");
external(VOID, "GetStartupInfo", "GetStartupInfoA", "kernel32.dll");
external(INT, "CreateProcess", "CreateProcessA", "kernel32.dll");
external(INT, "PeekNamedPipe", "PeekNamedPipe", "kernel32.dll");
external(INT, "ReadFile", "ReadFile", "kernel32.dll");
external(INT, "WriteFile", "WriteFile", "kernel32.dll");
external(INT, "TerminateProcess", "TerminateProcess", "kernel32.dll");
external(INT, "WaitForSingleObject", "WaitForSingleObject", "kernel32.dll");
external(INT, "CloseHandle", "CloseHandle", "kernel32.dll");

string path_python=pathfolder()+"python\python.exe -i";
int hReadPipe1, hWritePipe1, hReadPipe2, hWritePipe2;
char pi[16];
char W_buff[10000];
string Rez;

int readed;
int PythonbytesAvail;
int lBytesWrite;
string COMMAND;

if (StartPython())//Запустить интерпретатор python и наладить с ним связь PIPE
{
PythonbytesAvail=0;
while(PythonbytesAvail==0)
{
if (PeekNamedPipe(hReadPipe1, NULL, 0, NULL, address(#PythonbytesAvail), NULL)==0)
{
messagebox ("error 1");
goto er;
}
sleep(1);
}

messagebox ("0 прочитаем "+format(PythonbytesAvail));//Читать сколько байт

ReadFile(hReadPipe1, address(#W_buff[0]), PythonbytesAvail , address(#readed), 0);//Читаем
W_buff[PythonbytesAvail]=0;
messagebox (format(#W_buff[0]));//вывод ответа
////////////////////////////


//Отправляем команду
COMMAND="x = 123";
WriteFile(hWritePipe2,COMMAND+"^n", size(COMMAND+"^n"), address(#lBytesWrite), 0);
messagebox ("Отправили "+COMMAND);

//Отправляем команду
COMMAND="y = 40";
WriteFile(hWritePipe2,COMMAND+"^n", size(COMMAND+"^n"), address(#lBytesWrite), 0);
messagebox ("Отправили "+COMMAND);

//Отправляем команду
COMMAND="print(x+y)";
WriteFile(hWritePipe2,COMMAND+"^n", size(COMMAND+"^n"), address(#lBytesWrite), 0);
messagebox ("Отправили "+COMMAND);

PythonbytesAvail = 0;
while(PythonbytesAvail==0)
{
if (PeekNamedPipe(hReadPipe1, NULL, 0, NULL, address(#PythonbytesAvail), NULL)==0)
{
messagebox ("error 2");
goto er;
}
sleep(1);
}

messagebox ("1 прочитаем "+format(PythonbytesAvail));//Читать сколько байт
//Считываем ответ
ReadFile(hReadPipe1, address(#W_buff[0]), PythonbytesAvail , address(#readed), 0);//Читаем
W_buff[PythonbytesAvail]=0;
messagebox (format(#W_buff[0]));//вывод ответа
////////////////////////////


ClosePython();//Завершить работу с каналом и интерпретатором
}


er:;


function StartPython()
{
int ret;

//SECURITY_ATTRIBUTES
char sa[12];
initialarray(#sa[0], 0);
writeaddress(sizearray(sa), address(#sa[0]));
writeaddress(0, address(#sa[4]));
writeaddress(1, address(#sa[8]));

ret=CreatePipe(address(#hReadPipe1),address(#hWritePipe1),address(#sa[0]),0);
if (ret==0)return 0;
ret=CreatePipe(address(#hReadPipe2),address(#hWritePipe2),address(#sa[0]),0);
if (ret==0)return 0;

//STARTUPINFO
char si[68];
initialarray(#si[0], 0);
GetStartupInfo(address(#si[0]));
writeaddress(sizearray(si), address(#si[0]));
writeaddress(STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES, address(#si[44]));
writeaddress(SW_HIDE, address(#si[48]));
writeaddress(hReadPipe2, address(#si[56]));
writeaddress(hWritePipe1, address(#si[60]));
writeaddress(hWritePipe1, address(#si[64]));

//PROCESS_INFORMATION
initialarray(#pi[0], 0);
ret=CreateProcess(0,path_python,0,0,1,0,0,0,address(#si[0]),address(#pi[0]));
if (ret==0)return 0;

return 1;
}


function ClosePython()
{
TerminateProcess(addressi(address(#pi[0])), 0);
WaitForSingleObject(addressi(address(#pi[0])), INFINITE);
CloseHandle(addressi(address(#pi[0])));
CloseHandle(addressi(address(#pi[4])));
CloseHandle(hReadPipe1);
CloseHandle(hWritePipe1);
CloseHandle(hReadPipe2);
CloseHandle(hWritePipe2);
}
4. asterka - 28 Мая, 2023 - 14:14:29 - перейти к сообщению
 Kibor пишет:
Запустите питон сам по себе. Возможно нет нужных dll

Установил питон. Попробовал запустить питон в кибор. Не запускается.

 Zireael пишет:
Этот код выполнится?

Запустил ваш код. Ничего не происходит. Никаких сообщений. Кибор не виснет, ctrl+shift+z работает.

У меня есть второй пк с Windows 10. Там всё хорошо работает. А тут почему-то никак.
5. Zireael - 28 Мая, 2023 - 14:24:20 - перейти к сообщению
Включите отладку (галка под меню в кибор) и запустите скрипт. Какие строки выполняются?

Проблема в Win11, некоторые функции возможно были изменены/исправлены. При этом написать об изменениях видимо не посчитали нужным.
6. asterka - 28 Мая, 2023 - 23:35:28 - перейти к сообщению
 Zireael пишет:
Включите отладку (галка под меню в кибор) и запустите скрипт.


Бесконечный повтор этой строчки:

CODE:
if ( PeekNamedPipe ( hReadPipe1 , NULL , 0 , NULL , address ( # PythonbytesAvail ) , NULL ) == 0 )
sleep ( 1 )


CODE: (Отобразить)
7. Zireael - 29 Мая, 2023 - 03:39:03 - перейти к сообщению
Хотя бы понятно какая функция не работает. У меня нет win11, так что проверить не смогу что именно не работает. Это уже если Kibor разберётся и исправит.

Powered by ExBB FM 1.0 Final