So fügen Sie ein Python-Skript in ein Bash-Skript ein

13

Ich muss das folgende Python-Skript in ein Bash-Skript aufnehmen.

Wenn das Bash-Skript erfolgreich ist, muss ich das folgende Skript ausführen:

#!/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()
Amal P Ramesh
quelle
4
script.sh && python script.py?
Costas
2
Warum "einschließen"? Warum nicht einfach ausführen?
Terdon
1
Bash-Skript aus Python aufrufenimport os os.system ("./script.sh")
Costas

Antworten:

8

Sie können heredoc verwenden, wenn Sie die Quelle von Bash- und Python-Skripten zusammenhalten möchten. Angenommen, der Inhalt einer Datei heißt 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

Jetzt läuft der pyinbash.shWille nach:

$ chmod 755 pyinbash.sh
$ ./pyinbash.sh
Exe
mkc
quelle
Gemäß dem Kommentar von OP zu einer anderen Antwort habe ich meine Antwort aktualisiert, die sich um Bash-Variablen im Python-Skript kümmert.
mkc
1
Ich kann den Wert der Variablen nicht vom Bash-Skript in das Python-Skript übertragen.
Amal P Ramesh
Ich ersetze subprocess.call (["echo", "\ $ bashvar"]) durch subprocess.call (["echo", "bashvar"]), jetzt funktioniert es.
Amal P Ramesh
Das war ziemlich ordentlich!
SexyBeast
16

Übergeben Sie einfach einen HereDoc an python -.

Von der Python-Hilfe 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"
Dalvenjia
quelle
Ich verstehe nicht, warum dies abgelehnt wurde. In einigen Fällen ist dies eine einfache und praktikable Lösung. Es gibt jedoch die (Haupt-) Einschränkung, dass Sie keine Standardeingabe im Python-Skript verwenden können (da es vom Heredoc stdin empfängt).
Pyrocrasty
Ich hasse Kommentare ohne Kommentar. Für mich geht das. Upvoted es ;-)
kev
Diese Antwort wurde aktualisiert, da das Skript (im Gegensatz zur akzeptierten Antwort) nicht in das Dateisystem geschrieben wird.
Huw Walters
2

Der einfachste Ansatz besteht darin, das Python-Skript beispielsweise als zu speichern script.pyund es dann entweder über das Bash-Skript oder nach dem Bash-Skript aufzurufen :

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

Oder

script.sh && script.py
JohannRamos
quelle
Während der Ausführungszeit des Bash-Skripts werden einige Variablen definiert. Ich benötige dies im Python-Skript für den Nachrichtentext.
Amal P Ramesh