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 <my_mail@192.168.75.1>"
to_addr = "<my_mail@192.168.75.1"
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()

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

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"

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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.