Como incluir script python dentro de um script bash

6

Eu preciso incluir abaixo o script python dentro de um script bash.

Se o script bash terminar com sucesso, preciso executar o script abaixo.

#!/usr/bin/python    
from smtplib import SMTP
import datetime
debuglevel = 0

smtp = SMTP()
smtp.set_debuglevel(debuglevel)
smtp.connect('192.168.75.1', 25)
smtp.login('my_mail', 'mail_passwd')

from_addr = "My Name <[email protected]>"
to_addr = "<[email protected]"
subj = "Process completed"
date = datetime.datetime.now().strftime( "%d/%m/%Y %H:%M" )
#print (date)
message_text = "Hai..\n\nThe process completed."

msg = "From: %s\nTo: %s\nSubject: %s\nDate: %s\n\n%s" % ( from_addr, to_addr, subj, date, message_text )

smtp.sendmail(from_addr, to_addr, msg)
smtp.quit()
    
por Amal P Ramesh 13.02.2015 / 19:01

4 respostas

4

Você pode usar heredoc se quiser manter a origem dos scripts bash e python juntos. Por exemplo, diga o seguinte são os conteúdos de um arquivo chamado pyinbash.sh :

#!/bin/bash

echo "Executing a bash statement"
export bashvar=100

cat << EOF > pyscript.py
#!/usr/bin/python
import subprocess

print 'Hello python'
subprocess.call(["echo","$bashvar"])

EOF

chmod 755 pyscript.py

./pyscript.py

Agora, a execução do pyinbash.sh resultará em:

$ chmod 755 pyinbash.sh
$ ./pyinbash.sh
Exe
    
por 13.02.2015 / 19:24
6

Basta passar um HereDoc para python - .

De ajuda do python python -h :

- : program read from stdin

#!/bin/bash

MYSTRING="Do something in bash"
echo $MYSTRING

python - << EOF
myPyString = "Do something on python"
print myPyString

EOF

echo "Back to bash"
    
por 13.02.2015 / 19:58
2

A abordagem mais simples é apenas salvar o script python como, por exemplo, script.py e, em seguida, chamá-lo do script bash ou chamá-lo após o script bash:

#!/usr/bin/env bash
echo "This is the bash script" &&
/path/to/script.py

Ou

script.sh && script.py
    
por 13.02.2015 / 19:05
0

Que tal isso para um exemplo:

PYTHON_BIN=/usr/bin/python
if [ -x $PYTHON_BIN ]; then
$PYTHON_BIN -c "print 'Hello, world'"
else
echo 'Hello, world'
fi

VS

$ ./foobar.py
env: python: No such file or directory
    
por 19.02.2017 / 06:50