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

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

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

> Без описания
Adomb
Отправлено: 31 Июля, 2020 - 15:22:52
Post Id



Пользователь
Мастер


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




Скрипт питона в файле script.txt
CODE:
def add(x, y):
....return x + y
add(1, 10)

точки вместо табуляции здесь
Второй пример в учебнике - с функцией затык получается? Функция нужно не построчно вводить, а сразу. И ещё интер следом.

(Отредактировано автором: 31 Июля, 2020 - 15:25:28)

 
 Top
Kibor
Отправлено: 31 Июля, 2020 - 18:13:15
Post Id



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


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




Этого я не знаю.
В дальнейшем я возможно интегрирую Питон в Кибор.
Вообще то это все ради другой цели. Интеграция с Питоном просто побочный эффект.
Планируется реализация автоматизации в браузерах через Selenium и драйвер браузера.
К сожалению под C++ нет библиотек для работы с ним. Есть на Питоне. Поэтому я его использовал.

Через драйвер браузера можно работать с элементами страничек практически как с элементами диалоговых окон, так как их можно идентифицировать. Так же возможно парсить страницы с javascript, работать в браузере без самого браузера и многое другое.

Пример как это работает можно увидеть тут. Скрипт Python в Кибор. Работа с браузером через Selenium драйвер браузера
 
 Top
Kibor
Отправлено: 01 Августа, 2020 - 18:34:14
Post Id



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


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




 Adomb пишет:
с функцией затык получается?


Пример как вводить функцию и ее вызывать:
Код питона с функцией
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:
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:
#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);
}


Если надо с файла, прочитайте его в бинарном режиме. С помощью регулярки замените все \r\n на \n, переведите в стринг и запускайте.
Не забудьте что пустые строки будут Ентер. Так же про пробелы тоже.
 
 Top
Zireael
Отправлено: 01 Августа, 2020 - 21:10:36
Post Id



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


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




 Цитата:
initialarray(#si[0], 0);
ZeroMemory(address(#si[0]),sizearray(si));

Зачем 2 раза заполнять массив нулями?
 
 Top
Kibor
Отправлено: 01 Августа, 2020 - 21:19:34
Post Id



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


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




 Zireael пишет:
Зачем 2 раза заполнять массив нулями?

Издержки перевода кода C++ в Кибор.
 
 Top
Kibor
Отправлено: 03 Августа, 2020 - 04:06:43
Post Id



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


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




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


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




Powered by