Executar script python no método Java para retornar valor para o próprio método

Boa noite.
Estou desenvolvendo um trabalho com Raspberry e gostaria de desenvolver todo o aplicativo em Java porém me deparei com a questão que a biblioteca Pi4J não responde em velocidade adequada para a leitura dos sensores. A minha intenção é a partir de um método Java executar o script em Python que lê os sensores e assim atualizar os valores do objeto com essas leituras.
Isso é possível?
Fiz várias pesquisa e encontrei modos de implementar Java a partir do Python com Jython, mas não ao contrario.

Quanto a integração das tecnologias, eu não tenho como ajudar.
Mas dê uma olhada no java 9.

Creio que possa melhorar a velocidade, por causa da modularização.
Como você usa Raspberry, veja se não seria mais interessante usar C, pois você poderia exportar para o Java por meio do JNI, pena que ainda não fiz nada parecido, por isso é só uma sugestão.

Ainda não vi muito do java 9, mas fora a classe module-info, com require e exports, tô fazendo tudo igual (aprendendo) a versão 9 ainda.

Aqui é somente módulos:



Não quero chegar nem perto do jShell, simplesmente não achei graça.

Olá @addller, não conheço essa funcionalidade vou dar uma pesquisada sobre o Java 9. Tendo algum resultado posto aqui.
Obrigado.

Dá uma pesquisada sobre jython, ele faz uma boa integração do Java com python.

A maioria das bibliotecas estáveis para Raspberry Pi são escritas em Python (percebi isso durante meu TCC).

Se não quiser utilizar JNI, você pode fazer uma aplicação Python que rode em linha de comando, de modo que possa executá-la a partir do Java utilizando o método exec da classe Runtime.

Não é algo trivial de se fazer pois tem que ficar lendo a saída do processo disparado, mas há algum tempo fiz uma classe pra isso.

1 curtida

Staroski vi sua aplicação e realmente atenderia, mas hoje utilizo o Python para gravar os dados no BD então me pergunto se essa solução não seria uma paralela a que já utilizo hoje. A minha intenção era buscar um recurso que obtendo os valores diretos poderia reduzir a carga do processador e memória, tendo em vista os limites do raspberry, será que tendo que ler os dados de saída não teria um custo tanto quanto o acesso ao BD?

Não considero o Raspberry tão limitado, é praticamente um desktop miniaturizado, não sei qual versão você tem, o meu é um Raspberry Pi 3, tem 1GB de RAM e processador quadcore, acho que é muito recurso, considerando que eu comecei programando em java em uma máquina com 56MB de RAM e processador de 500MHz. :slight_smile:.

Sobre ler os dados de saída, não me parece custoso, claro depende como é a saída do seu programa em python, mas voccê poderia otimizar para já serializar algo de acordo com o que o java espera receber…

beleza staroski.
Vou utilizar a leitura como explicou a princípio vai funcionar beleza.

Obrigado a todos pela ajuda e dicas.

1 curtida