Obter retorno de uma função em Python para uma variável em shell script

Saudações,

Preciso rodar um código em python chamado usando shell script e obter a saída de uma função numa variável do shell script para uso futuro.

Gostaria de saber se alguém possui alguma ideia de como fazer isso, se eu devo chamar alguma função específica da biblioteca os e como eu devo receber o valor na variável no script (como por exemplo VAR=$(python myScript.py).

Se entendi bem, segue um exemplo.

  • Arquivo test.py Python
def function(arg1):
    return arg1
  • Arquivo test.sh Shell Script
var=$(python -c 'from test import function;print(function("Ola"))')
echo "${var} mundo!"

Executando:

bash test.sh

Saída:

Ola mundo!


Neste caso os arquivos tem que estarem no mesmo diretório.

Só para completar use o.

bash +x test.sh

Para obter uma depuração.

Há duas maneiras de fazer isso:

  • Invocar no shell um programa em Python que faz print do que você quer armazenar no shell (da mesma forma que você faria para mostrar no terminal):
#!/bin/sh
VAR=$(python -c 'print(2**0.5)')
echo "$VAR" | rev

(o exemplo aqui é simples com -c, mas basta modificar o myScript.py para print o que você quer armazenar no shell).

  • Importar os no Python, definir os.environ["VAR"] e, ao iniciar um shell a partir do Python (os.system, subprocess.popen, etc.), $VAR estará definida. Note que os.environ só aceita strings.
#!/usr/bin/env/python3
import os
os.environ["VAR"] = str(2**0.5)
os.system("echo \"$VAR\" | rev")

Ambos mostram 1590373265312414.1, a raiz de 2 ao contrário.