Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Executar scripts python via power automate #132

Open
gabrielbdornas opened this issue May 20, 2024 · 2 comments
Open

Executar scripts python via power automate #132

gabrielbdornas opened this issue May 20, 2024 · 2 comments
Labels
bug Something isn't working

Comments

@gabrielbdornas
Copy link
Collaborator

gabrielbdornas commented May 20, 2024

Este vídeo demonstra como executar scripts Python utilizando Power Automate.

Em um exemplo simples, podemos verificar seu funcionamento1:

image

A tentativa de executar um arquivo com scripts não está acontecendo. A primeira tentativa feita foi a de rodar um script criado pelo governo de Goias.

import pandas as pd
from pathlib import Path
#import ipdb; ipdb.set_trace(context=10)

# Carregar a planilha
files_path = Path.cwd()
df = pd.read_excel(f'{files_path}/Filtro_PAD_04_Folha_05_2024.xlsx')

# Agrupar por Nome_do_Servidor e CPF e calcular a soma dos valores
grouped = df.groupby(['Nome_do_Servidor', 'CPF'])['Valor_de_GDVV_a_Receber'].sum()

# Para cada grupo, atualizar a linha com o menor valor original
for (nome, cpf), soma in grouped.items():
    indices = df[(df['Nome_do_Servidor'] == nome) & (df['CPF'] == cpf)].index
    menor_valor = df.loc[indices, 'Valor_de_GDVV_a_Receber'].min()
    df.loc[indices, 'Valor_de_GDVV_a_Receber'] = soma

# Excluir as linhas duplicadas
df.drop_duplicates(subset=['Nome_do_Servidor', 'CPF'], keep='first', inplace=True)

# Salvar a planilha atualizada
df.to_excel(f'{files_path}/planilha_atualizada_2.xlsx', index=False)

O arquivo executa perfeitamente via python <nome_arquivo.py> mas apresenta erros durante execução via Automate.
As tentativas envolveram cadastro do ambiente virtual que deveria ser utilizado2:

image

Ao tentar executar exec(open('C:/Users/m7522667/Documents/code/teste_goias/programa.py').read()) tivemos o erro3:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
LookupError: unknown encoding: cp1252

Cadastrei a variável de ambiente PYTHONIOENCODING = UTF-8, mas o erro continua:

image

Estou desconfiado que a versão do Python que o Automate utiliza atualmente (3.4) pode ser um dos causadores do problema2 já que "localmente" rodamos a versão 3.12.

Footnotes

  1. Interessante notar que não devemos utilizar return como nos códigos Javascript (executados dentro de funções) e sim print() statements.

  2. Rodei somente from pandas import pd para ver o que aconteceria e recebi o erro:
    File "C:\Users\m7522667\Documents\code\teste_goias\venv\Lib\site-packages\pandas\__init__.py", line 1 from __future__ import annotations.... Como ele achou o arquivo C:\Users\m7522667\Documents\code\teste_goias\venv\Lib\site-packages\pandas\__init__.py suspeito que o erro é decorrente da versão pandas instalada, incompatível com a versão Python 3.4. 2

  3. Execução deste código funcionou perfeitamente via console Python (python -i).

@gabrielbdornas gabrielbdornas added the bug Something isn't working label May 20, 2024
@gabrielbdornas
Copy link
Collaborator Author

Como provavelmente a fonte do problema é a versão utilizada pelo Power Automate, pensei em criar um arquivo executável a partir do script em questão. A solução é bem simples e o video How to turn your Python file (.py) into an .exe (Tutorial 2021) mostra como é possível.

Basta intalar o pacote pyinstaller via pip install pyinstaller e rodar pyinstaller programa.py --onefile. O executável criado ficará na pasta dist.

Depois basta chamar a ação "Executar aplicativo" no Power Automate passando o caminho do executável.

System.RunApplication.RunApplication ApplicationPath: $'''C:\\Users\\m7522667\\Documents\\code\\teste_goias\\dist\\programa.exe''' WindowStyle: System.ProcessWindowStyle.Normal ProcessId=> AppProcessId

@gabrielbdornas
Copy link
Collaborator Author

@YanVieira1905, a descoberta em questão mostra que a chamada da API SEI conforme havia pensado não dará certo. A melhor saída, então, será montarmos a API em uma máquina virtual. Vou estruturar melhor o raciocínio para conversarmos.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
Status: ✍ Backlog
Development

No branches or pull requests

1 participant