Clipper On Line • Ver Tópico - Python e Harbour, indo para GUI LINUX
Página 1 de 1

Python e Harbour, indo para GUI LINUX

MensagemEnviado: 23 Abr 2020 14:01
por Itamar M. Lins Jr.
Ola!

Probably many options. I'm a Linux user (currently Fedora 31, Harbour 3.2, gcc, Python 3). I've had success splitting up terminal applications into two parts:
1. Using glade and Python3 to develop a GUI front end, which calls....
2. A Harbour database "server" which does all the database heavy lifting

Item #2 can be based on the original Harbour terminal application code. Item #1 will be new. Good luck with the transition!

Como ?
* SAMPLE.PRG  Template Harbour 3.2 program callable from anywhere
*    sample compile: hbmk2 -static hbnf.hbc xhb.hbc sample.prg
*
* Sample call from Python3: >>> import subprocess
*                           >>> mret = subprocess.check_output(["./sample", "open"])
*   
* code as shown assumes one text parameter
* the do case statement can act on any number of predefined parameters
*          and multiple parameters per call if you so choose

PROCEDURE  MAIN(...)

PUBLIC mparms                                  && passed parameters

mparms      := HB_AParams()                    && array of parms
mparm_count := len( mparms )

msel = mparms[1]                               && get first parameter

do case
    case msel = "open"
        * code for open here
    case msel = "foobar"
        * code for foobar here
    otherwise
        * ...
endcase

RETURN

** End **


Não vi o código Python. Deve ser a parte das telas. Será DBF ?

Saudações,
Itamar M. Lins Jr.

Python e Harbour, indo para GUI LINUX

MensagemEnviado: 23 Abr 2020 16:11
por JoséQuintas
Só pra lembrar... que todos esquecem...
O Harbour como ser usado totalmente como DLL.

Será que compensa mexer no Harbour pra trabalhar com essas coisas.....
Ou não seria melhor colocar como DLL e usar...

De vez em quando penso nisso.
Porque trazer recursos que já existem no VB para o Harbour, se podemos levar o Harbour para o VB?

E deve valer pra página de internet também.

Python e Harbour, indo para GUI LINUX

MensagemEnviado: 24 Abr 2020 07:07
por bencz
Nada de mais nesse projeto .... apenas um programa chamando outro....

Python e Harbour, indo para GUI LINUX

MensagemEnviado: 25 Abr 2020 11:18
por Itamar M. Lins Jr.
Ola!
Para quem quer aprender Python ou já sabe algo, e quer integrar com Harbour.
É uma noticia, apenas para informar que tem gente usando ou pelo menos tentando.

Saudações,
Itamar M. Lins Jr.

Python e Harbour, indo para GUI LINUX

MensagemEnviado: 25 Abr 2020 12:06
por Vlademiro
Uma outra forma, além das que foram postas, é criar um webservice usando Harbour. Os retornos podem ser em JSON. A lib httpd permite criar o servidor com poucas linhas e as funções hb_jsonencode/decode tratam das entradas e saídas.

Python e Harbour, indo para GUI LINUX

MensagemEnviado: 25 Abr 2020 17:52
por bencz
Vlademiro

Ai sim, vejo coisas boas!

Python e Harbour, indo para GUI LINUX

MensagemEnviado: 30 Abr 2020 18:54
por alxsts
Olá!
Vlademiro escreveu:Uma outra forma, além das que foram postas, é criar um webservice usando Harbour


Poderia postar um exemplo funcional?

Python e Harbour, indo para GUI LINUX

MensagemEnviado: 30 Abr 2020 21:37
por Vlademiro
Claro, no momento não estou no computador, mais tarde eu coloco algumas dicas para quem quer começar "do zero"

Python e Harbour, indo para GUI LINUX

MensagemEnviado: 30 Abr 2020 22:19
por Vlademiro
Anexei um exemplo que já tinha aqui.

httpd.prg
(1.19 KiB) Baixado 115 vezes


Ele deve ser compilado com hbhttpd.hbc
Ainda não é o webservice, mas já é um começo. Note que cada pasta virtual corresponde ao retorno de uma função. (Veja o hash na linha 29)

Python e Harbour, indo para GUI LINUX

MensagemEnviado: 30 Abr 2020 22:38
por Vlademiro
Agora, a partir do exemplo anterior, substitua a função Start por :


FUNCTION Start()

   LOCAL hStruct := { => }
   
   hStruct[ "CODCLI" ] := "0001"
   hStruct[ "NOME" ] := "HELLO WORLD"
   
   UAddHeader( "Content-Type", "application/json" ) // Json type return

    RETURN HB_JsonEncode( hStruct )



Temos um retorno no formato JSON, que pode ser lido por qualquer aplicativo que consiga "enchergar" o servidor na rede.

A função UAddHeader() informa ao navegador que o retorno é em formato JSON
A função HB_JsonEncode converte um hash em uma string json

Agora vamos criar um cliente simples em PHP...

Python e Harbour, indo para GUI LINUX

MensagemEnviado: 30 Abr 2020 22:57
por Vlademiro
Esse pequeno script, feito em PHP, lê o JSON do Harbour e o transforma em hash php (faz o inverso)

<?php
// Cria o cURL
$curl = curl_init();
// Seta algumas opções
curl_setopt_array($curl, [
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => 'http://localhost:8002'
]);
// Envia a requisição e salva a resposta
$response = curl_exec($curl);
// Fecha a requisição e limpa a memória
$response = json_decode( $response );
var_dump( $response );

curl_close($curl);



Para que funcione precisa da extensão curl funcionando no seu PHP.

Python e Harbour, indo para GUI LINUX

MensagemEnviado: 30 Abr 2020 23:00
por Vlademiro
No contrib do harbour tem um exemplo desse httpd com outras funções, inclusive com rotinas de autenticação (sessão) que você pode usar para proteger seu webservice de acessos indesejados.

Se você está familiarizado com JS/JQuery, existem diversas libs que geram resultados muito bons a partir da leitura de um json. Por exemplo:

http://www.alpacajs.org/

Agora com Python eu já não conheço, mas nada que uma pesquisa no google não resolva, já que o JSON se transformou em um padrão.

Python e Harbour, indo para GUI LINUX

MensagemEnviado: 01 Mai 2020 19:07
por alxsts
Olá!

Obrigado Vlademiro!

Python e Harbour, indo para GUI LINUX

MensagemEnviado: 05 Nov 2020 09:33
por mauricioportela
Não vi o código Python. Deve ser a parte das telas. Será DBF ?


a chamada do codigo python:


# importa do modulo de processos/subprocessos
import subprocess
# recebe na variavel 'mret' - um bloco
mret = subprocess.check_output(["./sample", "open"])



Eu executei aqui no meu computador (windows 10) mas, ele congela o interpretador python.

eu troquei:
./sample

por
sample.exe