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

 Помощь      Поиск      Пользователи

 

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

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

> Описание: Выполнение Python скриптов в Кибор в отдельном потоке с синхронизацией и без
Kibor
Отправлено: 03 Августа, 2020 - 02:46:09
Post Id



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


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




В этой версии появилась возможность выполнять в Кибор Python скрипты и обмениваться с Python данными.
Скрипты можно запускать с файла или выполнять их по одной команде с помощью специальных функций Кибор.

Так же можно выполнять Питон скрипты непосредственно в коде Кибор с помощью директив __python или __python_sync и __end_python
 Цитата:
__python
import time
time.sleep(5)
__end_python


Для использования новых функций необходимо скачать программу с(для просмотра ссылки Вам необходимо авторизоваться) и заново ее перустановить. Лицензия при этом останется.
Либо скачать этот архив и извлечь с него файлы и папки. Они должны быть по адресу
папка_с_кибор/python/

При выполнение Питоном инструкции input, выводится диалоговое окно.

Описание новых функций:
 Цитата:
runpython()
или
runpython(0)

Запускает интерпретатор Питон.
Может быть без параметров и с одним параметром.
1 - всегда запускать новую копию Python. При остановке скрипта ее закрывать.
0 - Проверять наличие запущенного Python и если он есть, не запускать новую копию. При остановке скрипта не закрывать Python.
По умолчанию передается параметр 1
Подробнее о параметре
Возвращает 1 при удачном запуске
0 при неудаче.

 Цитата:
closepython()

Завершает работу с интерпретатором.
Возвращает 1 если завершил работу.
0 если интерпретатор не был запущен.

 Цитата:
sendpython("print(^'yes^')");

Отправляет Питону команду print('yes') и нажимает Ентер. Не синхронная. Не ждет окончания команды. Можно вводить не sendpython("print(^'yes^')");, а просто sendpython("print('yes')");
Возвращает 1 при удаче.

 Цитата:
getpython()

Считывает последний ответ с Питона.
Возвращает string.
То есть если перед этим мы отправили print('yes'), то прочитаем yes
Данная функция может считать ответ только один раз. При повторных попытках считывания или если Питон не готов выдать ответ (выполняет какую то задачу) эта функция вернет ERROR_READ_PYTHON

 Цитата:
sendgetpython("print(^'yes^')");

Посылает Питону print('yes') и сразу же получает ответ. Возвращает string. В данном случае yes.. Синхронная. После отправки ждет отработки кода и получения ответа.
Синхронность работы не распространяется на вызов Питон функций.

 Цитата:
runfilepython ("C:\Program Files (x86)\Kibor\script.txt")

Считывает скрипт Питона с файла и выполняет его. Ответ, если есть необходимость надо получать так же как и в случае sendpython функцией getpython
В файле допускаются функции и их вызов.
Перевод срока в файле является Ентером.

 Цитата:
loadfilepython(#sp[0], "C:\Program Files (x86)\Kibor\script.txt")

Загружает скрипт Питона с файла в массив string, на который надо дать указатель первым параметром. Перед загрузкой чистит скрипт от комментариев, пробелов и переносов строк перед скриптом.
Возвращает количество загруженных строк. Перевод стоки считается Ентером.
Затем можно выполнить эти строки синхронно или асинхронно соответствующими функциями.

================================================================

Скрипты Питона выполняются в отдельном потоке. Поэтому за синхронизацией надо следить самому. Как синхронизировать я скажу ниже.





Примеры скриптов:

CODE:
if (runpython())//Запустили интерпретатор
{
sendpython("print(^'Kibor^')");//Отправили
messagebox (getpython());//Получили
closepython();//Завершили работу с интерпретатором
}


...................

CODE:
if (runpython())//Запустили интерпретатор
{
messagebox (sendgetpython("print(^'Kibor^')"));//Отправили и Получили
closepython();//Завершили работу с интерпретатором
}


...................

Пример выполнения цикла:
CODE:
for number in range(50):
print(number)


Необходимо в конце ставить ^n
CODE:
if (runpython())//Запустили интерпретатор
{
messagebox (sendgetpython("for number in range(50):^n print(number)^n"));//Отправили
closepython();//Завершили работу с интерпретатором
}


...................

Пример синхронизации:
Есть пример, в Питоне выдержать паузу 5 секунд, потом напечатать слово Text и получить его в виде ответа.
Пример ниже не выполнит эту задачу, потому что messagebox (getpython()); не будет ждать пока Питон закончит паузу и прочитает ответ который пришел от sendpython("time.sleep(5)");
CODE:
if (runpython())//Запустили интерпретатор
{
sendpython("import time");//Отправили
sendpython("time.sleep(5)");//Отправили паузу в 5 секунд
sendpython("print(^'Text^')");//Отправили
messagebox (getpython());//Получили, но не то что ожидали
closepython();//Завершили работу с интерпретатором
}


Как правильно синхронизировать
Для этого отправляем команды синхронной функцией sendgetpython
CODE:
if (runpython())//Запустили интерпретатор
{
sendgetpython("import time");//Отправили
sendgetpython("time.sleep(5)");//Отправили паузу в 5 секунд
sendpython("print(^'Text^')");//Продолжаем работу
messagebox (getpython());//Получили то что ожидали
closepython();//Завершили работу с интерпретатором
}


Функция sendgetpython считывает ответ после выполнения кода Питона.
Если в этой функции ожидается вывод результата print, который надо получить, то его следует получать сразу в этой функции:
CODE:
if (runpython())//Запустили интерпретатор
{
sendgetpython("import time");//Отправили
sendgetpython("time.sleep(5)");//Отправили паузу в 5 секунд
messagebox (sendgetpython("print(^'Text^')"));//Продолжаем работу и получаем ответ
closepython();//Завершили работу с интерпретатором
}


Иначе если мы сразу не получили от sendgetpython ответ, на следующий вызов getpython мы получим ERROR_READ_PYTHON
CODE:
if (runpython())//Запустили интерпретатор
{
sendgetpython("import time");//Отправили
sendgetpython("time.sleep(5)");//Отправили паузу в 5 секунд
sendgetpython("print(^'Text^')");//Продолжаем работу
messagebox (getpython());//Получили ERROR_READ_PYTHON
closepython();//Завершили работу с интерпретатором
}


Можно так синхронизировать. Так надо синхронизировать выполнение функций Питона. Пример будет ниже.
CODE:
if (runpython())//Запустили интерпретатор
{
sendpython("import time");//Отправили
sendpython("time.sleep(1)");//Отправили паузу в 5 секунд
sendpython("print(^'yes^')");//После окончания выполнения кода Питона посылаем сообщение что задачу закончили
while (getpython()!="yes")sleep(10);// Ждем в цикле это сообщение
sendpython("print(^'Text^')");//Продолжаем работу
messagebox (getpython());//Получили то что ожидали
closepython();//Завершили работу с интерпретатором
}


...................

Пример выполнения скрипта с файла.
В файле могут быть как функции, так их вызов и отдельные инструкции.
Функции с фала можно вызывать как в самом файле, так и потом с помощью команд Кибор.

К примеру есть такой скрипт:
CODE:

import time

def foo():
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
web = webdriver.Firefox(executable_path=r'C:\Program Files (x86)\Kibor\python\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()
print('yes')

foo()


Он содержит функцию и ее вызов. Данная функция требует время на выполнение, так как она запускает браузер и производит с ним кое какие действия.
Эта функция будет одновременно вызвана при обработке функцией runfilepython, поскольку в скрипте есть вызов foo()
Для синхронизации в конце функции foo содержится команда вывести слово означающее конец работы функции.

Синхронизированный код Кибор:
CODE:

if (runpython())//Запустили интерпретатор
{
if (runfilepython ("C:\Program Files (x86)\Kibor\script.txt"))//Прочитали скрипт с файла и выполняем его, если там есть что то кроме функций
{
while (getpython()!="yes")sleep(100);// Ждем в цикле это сообщение
}
messagebox ("Продолжаем дальше");
closepython();//Завершили работу с интерпретатором
}


...................

Или такой скрипт. Функцию foo будем вызывать по необходимости с Кибор:
CODE:

import time

def foo():
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
web = webdriver.Firefox(executable_path=r'C:\Program Files (x86)\Kibor\python\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()
print('yes')




CODE:
if (runpython())//Запустили интерпретатор
{
if (runfilepython ("C:\Program Files (x86)\Kibor\script.txt"))//Прочитали скрипт с файла и выполняем его, если там есть что то кроме функций
{
sendpython("foo()");//Вызвали функцию в Питоне
while (getpython()!="yes")sleep(10);// Ждем в цикле это сообщение
}
messagebox ("Продолжаем дальше");
closepython();//Завершили работу с интерпретатором
}


...................

А можем не синхронизировать. Пусть себе скрипт Питона работает, а мы этим временем будем делать свои дела, периодически проверяя или Питон закончил свою работу:

Скрипт Питона
CODE:

import time

def foo():
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
web = webdriver.Firefox(executable_path=r'C:\Program Files (x86)\Kibor\python\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()
print('yes')



CODE:
if (runpython())//Запустили интерпретатор
{
if (runfilepython ("C:\Program Files (x86)\Kibor\script.txt"))//Прочитали скрипт с файла и выполняем его, если там есть что то кроме функций
sendpython("foo()");//Вызвали функцию в Питоне
}

int a=0;
loop()
{
messagebox (a);
a++;
sleep(500);
if (getpython()=="yes")break;
}
messagebox ("Продолжаем дальше");

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


Или
CODE:
enabletimer(0);

if (runpython())//Запустили интерпретатор
{
if (runfilepython ("C:\Program Files (x86)\Kibor\script.txt"))//Прочитали скрипт с файла и выполняем его, если там есть что то кроме функций
sendpython("foo()");//Вызвали функцию в Питоне
}

int a=0;
loop()
{
messagebox (a);
a++;
sleep(500);
}

d:;
messagebox ("Продолжаем дальше");


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



CREATE_TIMER(0, 500)
{
if (getpython()=="yes")goto d;;
}


...................

Пример loadfilepython

Файл с скриптом Питона
CODE:
import time
print(x+y)
time.sleep(1);
time.sleep(1);
print(x*y)
time.sleep(2);
print('yes')


Синхронная работа:
CODE:
//Посточное выполнение с выводом результата каждой строки
string sp[1000];
int k;
if (runpython())//Запустили интерпретатор
{
sendpython("x=5");//Присваиваем переменныв в Питоне значения
sendpython("y=22");//Присваиваем переменныв в Питоне значения
k=loadfilepython (#sp[0], "C:\Program Files (x86)\Kibor\script.txt");//Прочитали скрипт с файла
for (int n=0; n<k; n++)
{
messagebox (sp[n]+"^r^n---------------^r^n"+sendgetpython(sp[n]));//Выполняем посточно синхронизировано скрипт и выводим результат
}
closepython();//Завершили работу с интерпретатором
}


Еще
CODE:
//Посточное выполнение без вывода результата, но синхрнизировано
string sp[1000];
int k;
string s="", t="";
if (runpython())//Запустили интерпретатор
{
sendpython("x=5");//Присваиваем переменныв в Питоне значения
sendpython("y=22");//Присваиваем переменныв в Питоне значения
k=loadfilepython (#sp[0], "C:\Program Files (x86)\Kibor\script.txt");//Прочитали скрипт с файла
for (int n=0; n<k; n++)
{
t=sendgetpython(sp[n]);//Выполняем посточно синхронизировано скрипт
if (t!="ERROR_READ_PYTHON")s=s+t+"^r^n";
}
messagebox (s);//Выполняем посточно синхронизировано скрипт и выводим результат
closepython();//Завершили работу с интерпретатором
}


Асинхронная
CODE:
//Асинхронное посточное выполнение с проверкой переодически или завершена работа
string sp[1000];
int k;
string s="", t;
if (runpython())//Запустили интерпретатор
{
sendpython("x=5");//Присваиваем переменныв в Питоне значения
sendpython("y=22");//Присваиваем переменныв в Питоне значения
k=loadfilepython (#sp[0], "C:\Program Files (x86)\Kibor\script.txt");//Прочитали скрипт с файла
for (int n=0; n<k; n++)sendpython(sp[n]);//Загрузка скрипта посточно

loop()//Рабочий цикл
{
//Что то делаем
//.....................
beep(1000, 200);
//.....................
//Периодически собираем информацию о работе и проверяем или не пришел ответ о окончание работы
s=s+getpython();
regexreplace(-1, #s, s, "ERROR_READ_PYTHON", "^n");
while(regexreplace(-1, #s, s, "^n^n", "^n")){}
if (regexsearch(1, #t, s, "yes")) break;
sleep(500);
}

messagebox (s);//Выполняем посточно синхронизировано скрипт и выводим результат
closepython();//Завершили работу с интерпретатором
}

 
 Top
Kibor
Отправлено: 03 Августа, 2020 - 12:25:12
Post Id



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


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




Поправил описание синхронизации выполнения скрипта Питона с Кибор.

Пример синхронизации:
Есть пример, в Питоне выдержать паузу 5 секунд, потом напечатать слово Text и получить его в виде ответа.
Пример ниже не выполнит эту задачу, потому что messagebox (getpython()); не будет ждать пока Питон закончит паузу и прочитает ответ который пришел от sendpython("time.sleep(5)");
CODE:
if (runpython())//Запустили интерпретатор
{
sendpython("import time");//Отправили
sendpython("time.sleep(5)");//Отправили паузу в 5 секунд
sendpython("print(^'Text^')");//Отправили
messagebox (getpython());//Получили, но не то что ожидали
closepython();//Завершили работу с интерпретатором
}


Как правильно синхронизировать
Для этого отправляем команды синхронной функцией sendgetpython
CODE:
if (runpython())//Запустили интерпретатор
{
sendgetpython("import time");//Отправили
sendgetpython("time.sleep(5)");//Отправили паузу в 5 секунд
sendpython("print(^'Text^')");//Продолжаем работу
messagebox (getpython());//Получили то что ожидали
closepython();//Завершили работу с интерпретатором
}


Функция sendgetpython считывает ответ после выполнения кода Питона.
Если в этой функции ожидается вывод результата print, который надо получить, то его следует получать сразу в этой функции:
CODE:
if (runpython())//Запустили интерпретатор
{
sendgetpython("import time");//Отправили
sendgetpython("time.sleep(5)");//Отправили паузу в 5 секунд
messagebox (sendgetpython("print(^'Text^')"));//Продолжаем работу и получаем ответ
closepython();//Завершили работу с интерпретатором
}


Иначе если мы сразу не получили от sendgetpython ответ, на следующий вызов getpython мы получим ERROR_READ_PYTHON
CODE:
if (runpython())//Запустили интерпретатор
{
sendgetpython("import time");//Отправили
sendgetpython("time.sleep(5)");//Отправили паузу в 5 секунд
sendgetpython("print(^'Text^')");//Продолжаем работу
messagebox (getpython());//Получили ERROR_READ_PYTHON
closepython();//Завершили работу с интерпретатором
}


Можно так синхронизировать. Так надо синхронизировать выполнение функций Питона. Пример работы с функциями Питон и запуск с файла первым постом..
CODE:
if (runpython())//Запустили интерпретатор
{
sendpython("import time");//Отправили
sendpython("time.sleep(1)");//Отправили паузу в 5 секунд
sendpython("print(^'yes^')");//После окончания выполнения кода Питона посылаем сообщение что задачу закончили
while (getpython()!="yes")sleep(10);// Ждем в цикле это сообщение
sendpython("print(^'Text^')");//Продолжаем работу
messagebox (getpython());//Получили то что ожидали
closepython();//Завершили работу с интерпретатором
}


-----------------------------------------------------------------

Пример выполнения цикла:
CODE:
for number in range(50):
print(number)


Необходимо в конце ставить ^n
CODE:
if (runpython())//Запустили интерпретатор
{
messagebox (sendgetpython("for number in range(50):^n print(number)^n"));//Отправили
closepython();//Завершили работу с интерпретатором
}
 
 Top
Kibor
Отправлено: 04 Августа, 2020 - 02:39:55
Post Id



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


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




Добавил функцию:

 Цитата:
loadfilepython(#sp[0], "C:\Program Files (x86)\Kibor\script.txt")

Загружает скрипт Питона с файла в массив string, на который надо дать указатель первым параметром. Перед загрузкой чистит скрипт от комментариев, пробелов и переносов строк перед скриптом. Перевод строки считается Ентером.
Возвращает количество загруженных строк.
Затем можно выполнить эти строки синхронно или асинхронно соответствующими функциями.

Переименовал прошлые функции. Улучшил алгоритм работы.


Пример loadfilepython

Файл с скриптом Питона
CODE:
import time
print(x+y)
time.sleep(1);
time.sleep(1);
print(x*y)
time.sleep(2);
print('yes')


Синхронная работа:
CODE:
//Посточное выполнение с выводом результата каждой строки
string sp[1000];
int k;
if (runpython())//Запустили интерпретатор
{
sendpython("x=5");//Присваиваем переменныв в Питоне значения
sendpython("y=22");//Присваиваем переменныв в Питоне значения
k=loadfilepython (#sp[0], "C:\Program Files (x86)\Kibor\script.txt");//Прочитали скрипт с файла
for (int n=0; n<k; n++)
{
messagebox (sp[n]+"^r^n---------------^r^n"+sendgetpython(sp[n]));//Выполняем посточно синхронизировано скрипт и выводим результат
}
closepython();//Завершили работу с интерпретатором
}


Еще
CODE:
//Посточное выполнение без вывода результата, но синхрнизировано
string sp[1000];
int k;
string s="", t="";
if (runpython())//Запустили интерпретатор
{
sendpython("x=5");//Присваиваем переменныв в Питоне значения
sendpython("y=22");//Присваиваем переменныв в Питоне значения
k=loadfilepython (#sp[0], "C:\Program Files (x86)\Kibor\script.txt");//Прочитали скрипт с файла
for (int n=0; n<k; n++)
{
t=sendgetpython(sp[n]);//Выполняем посточно синхронизировано скрипт
if (t!="ERROR_READ_PYTHON")s=s+t+"^r^n";
}
messagebox (s);//Выполняем посточно синхронизировано скрипт и выводим результат
closepython();//Завершили работу с интерпретатором
}


Асинхронная
CODE:
//Асинхронное посточное выполнение с проверкой переодически или завершена работа
string sp[1000];
int k;
string s="", t;
if (runpython())//Запустили интерпретатор
{
sendpython("x=5");//Присваиваем переменныв в Питоне значения
sendpython("y=22");//Присваиваем переменныв в Питоне значения
k=loadfilepython (#sp[0], "C:\Program Files (x86)\Kibor\script.txt");//Прочитали скрипт с файла
for (int n=0; n<k; n++)sendpython(sp[n]);//Загрузка скрипта посточно

loop()//Рабочий цикл
{
//Что то делаем
//.....................
beep(1000, 200);
//.....................
//Периодически собираем информацию о работе и проверяем или не пришел ответ о окончание работы
s=s+getpython();
regexreplace(-1, #s, s, "ERROR_READ_PYTHON", "^n");
while(regexreplace(-1, #s, s, "^n^n", "^n")){}
if (regexsearch(1, #t, s, "yes")) break;
sleep(500);
}

messagebox (s);//Выполняем посточно синхронизировано скрипт и выводим результат
closepython();//Завершили работу с интерпретатором
}



.................................

Файл с скриптом Питона
CODE:
import time
time.sleep(1);
time.sleep(1);
time.sleep(2);
print(x+y)



CODE:
//Асинхронное посточное выполнение с проверкой переодически или завершена работа
string sp[1000];
int k;
string s;
if (runpython())//Запустили интерпретатор
{
sendpython("x=5");//Присваиваем переменныв в Питоне значения
sendpython("y=22");//Присваиваем переменныв в Питоне значения
k=loadfilepython (#sp[0], "C:\Program Files (x86)\Kibor\script.txt");//Прочитали скрипт с файла
for (int n=0; n<k; n++)sendpython(sp[n]);//Загрузка скрипта посточно

loop()//Рабочий цикл
{
//Что то делаем
//.....................
beep(1000, 200);
//.....................
//Периодически собираем информацию о работе и проверяем или не пришел ответ о окончание работы
s=getpython();
if (s!="ERROR_READ_PYTHON") break;
sleep(500);
}

messagebox (s);//Выполняем посточно синхронизировано скрипт и выводим результат
closepython();//Завершили работу с интерпретатором
}


...................................

CODE:
import time
a=x+y
time.sleep(1);
time.sleep(1);
b=x-y
time.sleep(2);
print('yes')


CODE:
//Асинхронное посточное выполнение с проверкой переодически или завершена работа
string sp[1000];
int k;
if (runpython())//Запустили интерпретатор
{
sendpython("x=5");//Присваиваем переменныв в Питоне значения
sendpython("y=22");//Присваиваем переменныв в Питоне значения
k=loadfilepython (#sp[0], "C:\Program Files (x86)\Kibor\script.txt");//Прочитали скрипт с файла
for (int n=0; n<k; n++)sendpython(sp[n]);//Загрузка скрипта посточно

loop()//Рабочий цикл
{
//Что то делаем
//.....................
beep(1000, 200);
//.....................
//Периодически собираем информацию о работе и проверяем или не пришел ответ о окончание работы
if (getpython()=="yes") break;
sleep(500);
}

messagebox (sendgetpython("print(a)"));//Узнаем значение переменной a питона
messagebox (sendgetpython("print(b)"));//Узнаем значение переменной b питона
closepython();//Завершили работу с интерпретатором
}
 
 Top
Kibor
Отправлено: 04 Августа, 2020 - 13:04:36
Post Id



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


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




Автоматический запуск всего скрипта Асинхронное выполнение с проверкой периодически или завершена работа
Вводятся начальные данные и получается результат по завершению.

Скрипт Питона
CODE:
import time
a=x+y
time.sleep(1);
time.sleep(1);
b=x-y
time.sleep(2);
print('yes')


CODE:
//Автоматический запуск всего скрипта Асинхронное выполнение с проверкой периодически или завершена работа
if (runpython())//Запустили интерпретатор
{
sendpython("x=5");//Присваиваем переменныв в Питоне значения
sendpython("y=22");//Присваиваем переменныв в Питоне значения
runfilepython ("C:\Program Files (x86)\Kibor\script.txt");//Прочитали скрипт с файла

loop()//Рабочий цикл
{
//Что то делаем
//.....................
beep(1000, 200);
//.....................
//Периодически собираем информацию о работе и проверяем или не пришел ответ о окончание работы
if (getpython()=="yes") break;
sleep(500);
}

messagebox (sendgetpython("print(a)"));//Узнаем значение переменной a питона
messagebox (sendgetpython("print(b)"));//Узнаем значение переменной b питона
closepython();//Завершили работу с интерпретатором
}


............................

Пример вызова функций Питона, передача параметров в них и получение результата. Асинхронный вызов.

Скрипт Питона с функцией и параметрами. Не забывайте отступы
CODE:
a = 0
b = 0
def foo(x, y):
import time
global a
a = x+y
time.sleep(2)
global b
b = x-y
print('yes')


CODE:
//Автоматический запуск функции Питон Асинхронное выполнение с проверкой периодически или завершена работа
if (runpython())//Запустили интерпретатор
{
if (runfilepython ("C:\Program Files (x86)\Kibor\script.txt"))//Прочитали скрипт с файла
{
int x=5;
int y=22;
sendpython("foo("+format(x)+", "+format(y)+")");//Вызываем функцию Питона и передаем параметры

loop()//Рабочий цикл
{
//Что то делаем
//.....................
beep(1000, 200);
//.....................
//Периодически собираем информацию о работе и проверяем или не пришел ответ о окончание работы
if (getpython()=="yes") break;
sleep(500);
}

int a=formatsn(sendgetpython("print(a)"));//Узнаем значение переменной a питона
messagebox (a);
int b=formatsn(sendgetpython("print(b)"));//Узнаем значение переменной a питона
messagebox (b);
}
closepython();//Завершили работу с интерпретатором
}
 
 Top
Skycrew
Отправлено: 04 Августа, 2020 - 16:40:40
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 118
Дата рег-ции: Июль 2014  
Репутация: 0




Вот это круто! Я как раз собираюсь осваивать питон!
 
 Top
Kibor
Отправлено: 04 Августа, 2020 - 18:46:30
Post Id



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


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




Сильно не увлекайтесь, а то покинете Кибор) Шучу)
У меня так и чешутся руки добавить в Питон флаг окончания функции или цикла, а то эти отступы напрягают. Но могут не понять) Но возможно сделаю чисто для использования в Кибор. Будет гораздо проще.
 
 Top
Kibor
Отправлено: 09 Августа, 2020 - 07:27:38
Post Id



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


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




Пояснение автоматизации в браузере с помощью Кибор, Python и Selenium



Скрипт находится тут.

 
 Top
Kibor
Отправлено: 10 Августа, 2020 - 19:24:29
Post Id



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


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




Использование Питона для корректировка неточно распознанных слов при распознавание текста:
CODE:


if (runpython()==0){messagebox ("Не удалось запустить Python"); goto er;}//Запускаем интерпретатор Python
sendgetpython("import difflib");

//Массив верных слов
int kml=7;
string all_string[7]={"junior", "working", "recognition", "with", "violet", "interest", "renewal"}

messagebox ("корявое junlor = точое "+rez("junlor"));//Узнаем каккое слово близкое к корявому junlor
messagebox ("корявое worklng = точое "+rez("worklng"));//Узнаем каккое слово близкое к корявому worklng
messagebox ("корявое recognjtion = точое "+rez("recognjtion"));//Узнаем каккое слово близкое к корявому recognjtion
messagebox ("корявое recognllltjon точое = "+rez("recognllltjon"));//Узнаем каккое слово близкое к корявому recognllltjon
messagebox ("корявое lnterest = точое "+rez("lnterest"));//Узнаем каккое слово близкое к корявому lnterest
messagebox ("корявое vlolet = точое "+rez("vlolet"));//Узнаем каккое слово близкое к корявому vlolet
messagebox ("а на что похоже это? ietsert = точое "+rez("ietsert"));//Узнаем каккое слово близкое к корявому ietsert


closepython();//Завершаем работу с интерпретатором
er:;




function rez(string s)
{
double max=-1;
double t;
double i=0;
for (int n=0; n<kml; n++)
{
t=compare(s, all_string[n]);
if (t>max)
{
max=t;
i=n;
}
}
return all_string[i];
}



function compare(string s1, string s2)
{
sendgetpython("s1=^'"+s1+"^'");
sendgetpython("s2=^'"+s2+"^'");
__python
normalized1 = s1.lower()
normalized2 = s2.lower()
matcher = difflib.SequenceMatcher(None, normalized1, normalized2)
__end_python
return formatsn(sendgetpython("matcher.ratio()"));
}


 
 Top
Zireael
Отправлено: 11 Августа, 2020 - 03:30:17
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 2515
Дата рег-ции: Нояб. 2017  
Репутация: 283




Так чуть короче:
CODE:
if (runpython()==0){messagebox ("Не удалось запустить Python"); goto er;}//Запускаем интерпретатор Python

messagebox ("корявое junlor = точое "+compare("junlor"));//Узнаем каккое слово близкое к корявому junlor
messagebox ("корявое worklng = точое "+compare("worklng"));//Узнаем каккое слово близкое к корявому worklng
messagebox ("корявое recognjtion = точое "+compare("recognjtion"));//Узнаем каккое слово близкое к корявому recognjtion
messagebox ("корявое recognllltjon точое = "+compare("recognllltjon"));//Узнаем каккое слово близкое к корявому recognllltjon
messagebox ("корявое lnterest = точое "+compare("lnterest"));//Узнаем каккое слово близкое к корявому lnterest
messagebox ("корявое vlolet = точое "+compare("vlolet"));//Узнаем каккое слово близкое к корявому vlolet
messagebox ("а на что похоже это? ietsert = точое "+compare("ietsert"));//Узнаем каккое слово близкое к корявому ietsert

closepython();//Завершаем работу с интерпретатором
er:;


function compare(string s1)
{
sendgetpython("import difflib");
sendgetpython("s1=^'"+s1+"^'");
__python
all_string = ("junior", "working", "recognition", "with", "violet", "interest", "renewal") # список слов
list = []
for x in all_string:
__end_python
sendgetpython(" list.append(difflib.SequenceMatcher(None, x.lower(), s1.lower()).ratio())^n");
return sendgetpython("print(all_string[list.index(max(list))])");
}
 
 Top
Kibor
Отправлено: 11 Августа, 2020 - 04:00:26
Post Id



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


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




 Zireael пишет:
Так чуть короче:

А еще намного быстрее
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« О программе Кибор »


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




Powered by