Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

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

> Описание: Запуск интерпретатора Python, налаживание сввязи с ним через PIPE и выполнение скриптов Python в Кибор
Kibor
Отправлено: 30 Июля, 2020 - 23:02:25
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8091
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Устарело. Может рассматриваться только как пример кодинга а Кибор.
Как правильно использовать Python показано по ссылке

Выполнение Python скриптов в Кибор в отдельном потоке с синхронизацией и без. Выполнение с файла и отдельными командами с кода Кибор

Данный скрипт покажет как в Кибор можно запускать скрипты Python.
Используется интерпретатор Python, который можно установить самому и указать в скрипте путь к python.exe, либо скачать этот архив 30 МБ. В нем 2 нужных нам файла:
python.exe и python38.dll и папки DLLs и Lib
Поместить эти файлы в папку с программой Кибор.

Запуск интерпретатора происходит в фоновом режиме. Связь с ним осуществляется через канал Pipe.
Демонстрируется выполнение 4 команд с выводом результата каждой.
Так можно выполнять большие скрипты, не выводя промежуточный результат и не выдерживая паузы.
Скрипты можно считывать с файла.


Пример как вводить функцию и ее вызывать:
Код питона с функцией
CODE:
def foo(x, y):
(три пробела)a=5
(три пробела)b=2
(три пробела)c=12
(три пробела)d=255
(три пробела)e=15
(три пробела)print (a+b-x-y)
(три пробела)return a+b+x+y

print (foo(17, 1))


Не забываем про правило отступа в функциях Питона. Поэтому команда Кибор такая:
CODE:
WritePython("def foo(x, y):^n(три пробела)a=5^n(три пробела)b=2^n(три пробела)c=12^n(три пробела)d=255^n(три пробела)e=15^n(три пробела)print (a+b-x-y)^n(три пробела)return a+b+x+y^n^nprint (foo(17, 1))");// Выполнить в питоне "print(5+25)"



CODE:
#define STARTF_USESHOWWINDOW 1
#define STARTF_USESTDHANDLES 256
#define SW_HIDE 0
#define INFINITE -1
external(INT, "CreatePipe", "CreatePipe", "kernel32.dll");
external(VOID, "ZeroMemory", "RtlZeroMemory", "kernel32.dll");
external(VOID, "GetStartupInfo", "GetStartupInfoA", "kernel32.dll");
external(INT, "CreateProcess", "CreateProcessA", "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.exe -i";//Можно писать полный путь к интерпретатору Python если он не в папке с Кибор
int hReadPipe1, hWritePipe1, hReadPipe2, hWritePipe2;
char pi[16];
char W_buff[1000000];
string Rez;



if (StartPython())//Запустить интерпретатор python и наладить с ним связь PIPE
{
ReadPython();

WritePython("print(5+25)");// Выполнить в питоне "print(5+25)"
Rez=ReadPython();// Получить ответ
messagebox (Rez);// Показать ответ

WritePython("print(2+5)");// Выполнить в питоне "print(2+5)"
Rez=ReadPython();// Получить ответ
messagebox (Rez);// Показать ответ

WritePython("import webbrowser");// Выполнить в питоне "import webbrowser"
Rez=ReadPython();// Получить ответ

WritePython("webbrowser.open(^'https:/^/google.com^', new=2)");// Выполнить в питоне "webbrowser.open('https://google.com', new=2)"
Rez=ReadPython();// Получить ответ
messagebox (Rez);// Показать ответ

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





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);
ZeroMemory(address(#si[0]),sizearray(si));
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 WritePython(string COMMAND)
{
int lBytesWrite;
WriteFile(hWritePipe2,COMMAND+"^n", size(COMMAND+"^n"), address(#lBytesWrite), 0);
}

function ReadPython()
{
int readed;
int W_Ta=0;

while(ReadFile(hReadPipe1, address(#W_buff[W_Ta]), 1024 , address(#readed), 0)==1)
{
W_Ta=W_Ta+readed;

if (W_Ta>3)
{
if (W_buff[W_Ta-1]==32 && W_buff[W_Ta-2]==62 && W_buff[W_Ta-3]==62 && W_buff[W_Ta-4]==62)
{
if (W_Ta>4)
{
if (W_buff[W_Ta-5]==10){W_Ta=W_Ta-5; if (W_Ta>0){if (W_buff[W_Ta-1]==13)W_Ta--;} break;}
}

W_Ta=W_Ta-4; if (W_Ta>0){if (W_buff[W_Ta-1]==13)W_Ta--;} break;
}
}
}
W_buff[W_Ta]=0;

int E=0;
i: if (E+3<W_Ta)
{
if (W_buff[E]==46 && W_buff[E+1]==46 && W_buff[E+2]==46 && W_buff[E+3]==32)
{
E=E+4;
goto i;
}
}

if (E+3<W_Ta)
{
if (W_buff[E]==62 && W_buff[E+1]==62 && W_buff[E+2]==62 && W_buff[E+3]==32)
{
E=E+4;
}
}


return format(#W_buff[E]);
}

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);
}
 
 Top
Kibor
Отправлено: 31 Июля, 2020 - 01:30:23
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8091
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Чтение файла с скриптом и его выполнение.
Скрипт питона отправляет запрос на(для просмотра ссылки Вам необходимо авторизоваться) и получает исходный код страницы..

Скрипт питона в файле script.txt
CODE:
import urllib.request
response = urllib.request.urlopen('https://kibor-bot.com')
print(str(response.read().decode('cp1251')))



CODE:
#define STARTF_USESHOWWINDOW 1
#define STARTF_USESTDHANDLES 256
#define SW_HIDE 0
#define INFINITE -1
external(INT, "CreatePipe", "CreatePipe", "kernel32.dll");
external(VOID, "ZeroMemory", "RtlZeroMemory", "kernel32.dll");
external(VOID, "GetStartupInfo", "GetStartupInfoA", "kernel32.dll");
external(INT, "CreateProcess", "CreateProcessA", "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.exe -i";//Можно писать полный путь к интерпретатору Python если он не в папке с Кибор
int hReadPipe1, hWritePipe1, hReadPipe2, hWritePipe2;
char pi[16];
char W_buff[1000000];
string Rez;

int K=0;
string Lin[1000];
if (fopen (pathfolder()+"script.txt", "r")!=0)// Прочитать скрипт питона с файла
{
while(freadline(Lin[K])){if (Lin[K]!="")K++;}
fclose();
}

if (StartPython())//Запустить интерпретатор python и наладить с ним связь PIPE
{
ReadPython();

for (int n=0; n<K-1; n++)
{
WritePython(Lin[n]);// Выполнить построчко скрипт
Rez=ReadPython();// Получить ответ
}


WritePython(Lin[n]);// Выполнить последнюю строку
Rez=ReadPython();// Получить ответ

if (fopen (pathfolder()+"proxi.txt", "w")!=0)
{//если открылся
fwrite(Rez);
fclose();//закрываем файл
}
start(pathfolder()+"proxi.txt");

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





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);
ZeroMemory(address(#si[0]),sizearray(si));
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 WritePython(string COMMAND)
{
int lBytesWrite;
WriteFile(hWritePipe2,COMMAND+"^n", size(COMMAND+"^n"), address(#lBytesWrite), 0);
}

function ReadPython()
{
int readed;
int W_Ta=0;

while(ReadFile(hReadPipe1, address(#W_buff[W_Ta]), 1024 , address(#readed), 0)==1)
{
W_Ta=W_Ta+readed;

if (W_Ta>3)
{
if (W_buff[W_Ta-1]==32 && W_buff[W_Ta-2]==62 && W_buff[W_Ta-3]==62 && W_buff[W_Ta-4]==62)
{
if (W_Ta>4)
{
if (W_buff[W_Ta-5]==10){W_Ta=W_Ta-5; if (W_Ta>0){if (W_buff[W_Ta-1]==13)W_Ta--;} break;}
}

W_Ta=W_Ta-4; if (W_Ta>0){if (W_buff[W_Ta-1]==13)W_Ta--;} break;
}
}
}
W_buff[W_Ta]=0;

int E=0;
i: if (E+3<W_Ta)
{
if (W_buff[E]==46 && W_buff[E+1]==46 && W_buff[E+2]==46 && W_buff[E+3]==32)
{
E=E+4;
goto i;
}
}

if (E+3<W_Ta)
{
if (W_buff[E]==62 && W_buff[E+1]==62 && W_buff[E+2]==62 && W_buff[E+3]==32)
{
E=E+4;
}
}


return format(#W_buff[E]);
}

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);
}
 
 Top
Kibor
Отправлено: 31 Июля, 2020 - 18:12:47
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8091
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Скрипт Python
Работает через Selenium драйвер браузера
Скрипт запускает браузер Firefox
После запуска браузера переходит на поисковую систему Гугл
Находит по ID элемент поля ввода запроса
Вводит туда запрос "Kibor"
Нажимает Enter
В результатах поиска находит ссылку с частичным текстом kibor-bot.com
Переходит по ней на сайт(для просмотра ссылки Вам необходимо авторизоваться)
Для работы надо скачать этот архив 30 МБ. В нем 2 нужных нам файла:
python.exe и python38.dll и папки DLLs и Lib
Поместить эти файлы в папку с программой Кибор.

Видео работы

Скрипт Питона
CODE:
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
web = webdriver.Firefox(executable_path=r'C:\Program Files (x86)\Kibor\webdriver\geckodriver.exe', firefox_binary=r'C:\Program Files (x86)\Mozilla Firefox\firefox.exe')
web.get('https://www.google.com')
time.sleep(1);
element = web.find_element_by_name('q')
element.send_keys("Kibor")
time.sleep(1);
element.send_keys(Keys.ENTER)
time.sleep(3);
web.find_element_by_partial_link_text("kibor-bot.com").click()


Скрипт Кибор
CODE:
#define STARTF_USESHOWWINDOW 1
#define STARTF_USESTDHANDLES 256
#define SW_HIDE 0
#define INFINITE -1
external(INT, "CreatePipe", "CreatePipe", "kernel32.dll");
external(VOID, "ZeroMemory", "RtlZeroMemory", "kernel32.dll");
external(VOID, "GetStartupInfo", "GetStartupInfoA", "kernel32.dll");
external(INT, "CreateProcess", "CreateProcessA", "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.exe -i";//Можно писать полный путь к интерпретатору Python если он не в папке с Кибор
string path_browser="C:\Program Files (x86)\Mozilla Firefox\firefox.exe";//Путь к браузеру Firefox

int hReadPipe1, hWritePipe1, hReadPipe2, hWritePipe2;
char pi[16];
char W_buff[1000000];
string Rez;

/*
Скрипт Python
Работает через Selenium драйвер браузера
Скрипт запускает браузер Firefox
После запуска браузера переходит на поисковую систему Гугл
Находит по ID элемент поля ввода запроса
Вводит туда запрос "Kibor"
Нажимает Enter
В результатах поиска находит ссылку с частичным текстом kibor-bot.com
Переходит по ней на сайт https://kibor-bot.com
*/

/*
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
web = webdriver.Firefox(executable_path=r'C:\Program Files (x86)\Kibor\webdriver\geckodriver.exe', firefox_binary=r'C:\Program Files (x86)\Mozilla Firefox\firefox.exe')
web.get('https://www.google.com')
time.sleep(1);
element = web.find_element_by_name('q')
element.send_keys("Kibor")
time.sleep(1);
element.send_keys(Keys.ENTER)
time.sleep(3);
web.find_element_by_partial_link_text("kibor-bot.com").click()
*/


if (StartPython())//Запустить интерпретатор python и наладить с ним связь PIPE
{
ReadPython();

WritePython("import time");
Rez=ReadPython();// Получить ответ

WritePython("from selenium import webdriver");
Rez=ReadPython();// Получить ответ

WritePython("from selenium.webdriver.common.keys import Keys");
Rez=ReadPython();// Получить ответ

WritePython("web = webdriver.Firefox(executable_path=r^'"+pathfolder()+"\webdriver\geckodriver.exe^', firefox_binary=r^'"+path_browser+"^')");
Rez=ReadPython();// Получить ответ

WritePython("web.get(^'https:/^/www.google.com^')");
Rez=ReadPython();// Получить ответ

WritePython("time.sleep(1)");
Rez=ReadPython();// Получить ответ

WritePython("element = web.find_element_by_name(^'q^')");
Rez=ReadPython();// Получить ответ

WritePython("element.send_keys(^"Kibor^")");
Rez=ReadPython();// Получить ответ

WritePython("time.sleep(1)");
Rez=ReadPython();// Получить ответ

WritePython("element.send_keys(Keys.ENTER)");
Rez=ReadPython();// Получить ответ

WritePython("time.sleep(3)");
Rez=ReadPython();// Получить ответ

WritePython("web.find_element_by_partial_link_text(^"kibor-bot.com^").click()");
Rez=ReadPython();// Получить ответ

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





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);
ZeroMemory(address(#si[0]),sizearray(si));
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 WritePython(string COMMAND)
{
int lBytesWrite;
WriteFile(hWritePipe2,COMMAND+"^n", size(COMMAND+"^n"), address(#lBytesWrite), 0);
}

function ReadPython()
{
int readed;
int W_Ta=0;

while(ReadFile(hReadPipe1, address(#W_buff[W_Ta]), 1024 , address(#readed), 0)==1)
{
W_Ta=W_Ta+readed;

if (W_Ta>3)
{
if (W_buff[W_Ta-1]==32 && W_buff[W_Ta-2]==62 && W_buff[W_Ta-3]==62 && W_buff[W_Ta-4]==62)
{
if (W_Ta>4)
{
if (W_buff[W_Ta-5]==10){W_Ta=W_Ta-5; if (W_Ta>0){if (W_buff[W_Ta-1]==13)W_Ta--;} break;}
}

W_Ta=W_Ta-4; if (W_Ta>0){if (W_buff[W_Ta-1]==13)W_Ta--;} break;
}
}
}
W_buff[W_Ta]=0;

int E=0;
i: if (E+3<W_Ta)
{
if (W_buff[E]==46 && W_buff[E+1]==46 && W_buff[E+2]==46 && W_buff[E+3]==32)
{
E=E+4;
goto i;
}
}

if (E+3<W_Ta)
{
if (W_buff[E]==62 && W_buff[E+1]==62 && W_buff[E+2]==62 && W_buff[E+3]==32)
{
E=E+4;
}
}

return format(#W_buff[E]);
}

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);
}
 
 Top
Kibor
Отправлено: 01 Августа, 2020 - 18:37:38
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8091
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Пример ввода функции питона и вызова ее:

Код питона с функцией
CODE:
def foo(x, y):
(три пробела)a=5
(три пробела)b=2
(три пробела)c=12
(три пробела)d=255
(три пробела)e=15
(три пробела)print (a+b-x-y)
(три пробела)return a+b+x+y

print (foo(17, 1))


Не забываем про правило отступа в функциях Питона. Поэтому команда Кибор такая:
CODE:
WritePython("def foo(x, y):^n(три пробела)a=5^n(три пробела)b=2^n(три пробела)c=12^n(три пробела)d=255^n(три пробела)e=15^n(три пробела)print (a+b-x-y)^n(три пробела)return a+b+x+y^n^nprint (foo(17, 1))");// Выполнить в питоне "print(5+25)"


CODE:
#define STARTF_USESHOWWINDOW 1
#define STARTF_USESTDHANDLES 256
#define SW_HIDE 0
#define INFINITE -1
external(INT, "CreatePipe", "CreatePipe", "kernel32.dll");
external(VOID, "ZeroMemory", "RtlZeroMemory", "kernel32.dll");
external(VOID, "GetStartupInfo", "GetStartupInfoA", "kernel32.dll");
external(INT, "CreateProcess", "CreateProcessA", "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.exe -i";//Можно писать полный путь к интерпретатору Python если он не в папке с Кибор
int hReadPipe1, hWritePipe1, hReadPipe2, hWritePipe2;
char pi[16];
char W_buff[1000000];
string Rez;



if (StartPython())//Запустить интерпретатор python и наладить с ним связь PIPE
{
ReadPython();

//Вводим функцию и вызываеми ее (не забываем про правило отступов)
/*
def foo(x, y):
(три пробела)a=5
(три пробела)b=2
(три пробела)c=12
(три пробела)d=255
(три пробела)e=15
(три пробела)print (a+b-x-y)
(три пробела)return a+b+x+y

print (foo(17, 1))
*/


//Так делать не надо. Достаточно в строке указать три пробела. Просто на форуме они превращаются в один..
string prb=" "+" "+" ";
WritePython("def foo(x, y):^n"+prb+"a=5^n"+prb+"b=2^n"+prb+"c=12^n"+prb+"d=255^n"+prb+"e=15^n"+prb+"print (a+b-x-y)^n"+prb+"return a+b+x+y^n^nprint (foo(17, 1))");// Выполнить в питоне "print(5+25)"
//WritePython("def foo(x, y):^n a=5^n b=2^n c=12^n d=255^n e=15^n print (a+b-x-y)^n return a+b+x+y^n^nprint (foo(17, 1))");// Выполнить в питоне "print(5+25)"
Rez=ReadPython();// Получить ответ
messagebox (Rez);// Показать ответ

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





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);
ZeroMemory(address(#si[0]),sizearray(si));
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 WritePython(string COMMAND)
{
int lBytesWrite;
WriteFile(hWritePipe2,COMMAND+"^n", size(COMMAND+"^n"), address(#lBytesWrite), 0);
}

function ReadPython()
{
int readed;
int W_Ta=0;

while(ReadFile(hReadPipe1, address(#W_buff[W_Ta]), 1024 , address(#readed), 0)==1)
{
W_Ta=W_Ta+readed;

if (W_Ta>3)
{
if (W_buff[W_Ta-1]==32 && W_buff[W_Ta-2]==62 && W_buff[W_Ta-3]==62 && W_buff[W_Ta-4]==62)
{
if (W_Ta>4)
{
if (W_buff[W_Ta-5]==10){W_Ta=W_Ta-5; if (W_Ta>0){if (W_buff[W_Ta-1]==13)W_Ta--;} break;}
}

W_Ta=W_Ta-4; if (W_Ta>0){if (W_buff[W_Ta-1]==13)W_Ta--;} break;
}
}
}
W_buff[W_Ta]=0;

int E=0;
i: if (E+3<W_Ta)
{
if (W_buff[E]==46 && W_buff[E+1]==46 && W_buff[E+2]==46 && W_buff[E+3]==32)
{
E=E+4;
goto i;
}
}

if (E+3<W_Ta)
{
if (W_buff[E]==62 && W_buff[E+1]==62 && W_buff[E+2]==62 && W_buff[E+3]==32)
{
E=E+4;
}
}


return format(#W_buff[E]);
}

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);
}
 
 Top
Kibor
Отправлено: 03 Августа, 2020 - 04:07:09
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8091
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Выполнение Python скриптов в Кибор в отдельном потоке с синхронизацией и без. Выполнение с файла и отдельными командами с кода Кибор
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Учебник Кибор »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только администраторы и модераторы могут отвечать на сообщения в этом разделе.
 




Powered by