Seite 1 von 1
Umstellung os.system zu subprocess
Verfasst: Montag 12. Februar 2024, 11:20
von Zeusdragoon
Moin,
da ich gern eine Timeout integrieren möchte will ich auf subprocess wechseln.
Leider bekomme ich einen "SyntaxError: invalid syntax"
Funktion alleine läuft
Code: Alles auswählen
echo "E-Mail Text" | mail -s "E-Mail Betreff" xxx@Email.de
Funktion mit os.system im Python3 Skript läuft auf Raspberry PI Zero:
Code: Alles auswählen
Betreff="'Heizung Beekestr Modus wechsel'"
Text="'Steuerung neu gestartet'"
os.system("echo 'E-Mail Text' | mail -s 'E-Mail Betreff' xxx@Email.de")
Funktion mit subprocess geht nicht
Code: Alles auswählen
import subprocess
import sys
result=subprocess.run([sys.executable, "-c", "echo 'E-Mail Text' | mail -s 'E-Mail Betreff' xxx@Email.de"], capture_output=True, text=True, timeout=240)
print('output: ', result.stdout)
print('error: ', result.stderr)
Ich denke das es an der Wahl der Hochkomma liegt.
Bin aber Ratlos wie es zu optimieren ist.
Gruß Markus
Re: Umstellung os.system zu subprocess
Verfasst: Montag 12. Februar 2024, 13:26
von __deets__
Du denkst falsch. Das liegt an dem Versuch, das Kommando als python-Programm ausfuehern zu lassen. Warum willst du das? Das was du da machst ist equivalent zur Kommandozeile
Und Python kennt halt keine solche Syntax, darum auch der Fehler. Das sys.executable und -c muss also weg, aber dann geht's wegen der Pipe nicht.
Und das wuerde man auch so nie machen, weil es ganz anders geht: subprocess.run kennt das Argument "input", damit kannst du deinen Email-Text direkt eingeben.
Code: Alles auswählen
subprocess.run(["mail", "-s", "betreff", "email"], input="Inhalt", ...)
Re: Umstellung os.system zu subprocess
Verfasst: Montag 12. Februar 2024, 13:51
von Zeusdragoon
Vielen, vielen dank.
Es läuft.
Ich glaube ich muss mal heraufinden was das "echo" macht.
Hatte den Text von der Installation übernommen.
Gruß Markus
Re: Umstellung os.system zu subprocess
Verfasst: Montag 12. Februar 2024, 14:15
von __deets__
Das echo gibt den Inhalt der mail via stdin an das mail Kommando.
Re: Umstellung os.system zu subprocess
Verfasst: Dienstag 13. Februar 2024, 08:25
von DeaD_EyE
Zeusdragoon hat geschrieben: Montag 12. Februar 2024, 13:51
Ich glaube ich muss mal heraufinden was das "echo" macht.
Der Befehl echo gibt etwas auf der Standardausgabe im Terminal aus. Das Pipe Zeichen verbindet die Ausgabe eines Programms mit der Eingabe eines anderen Programms. Das gehört mit zur Unix-Philosophie.
Re: Umstellung os.system zu subprocess
Verfasst: Dienstag 13. Februar 2024, 20:51
von imonbln
Ich spreche einfach mal den Elefanten im Raum an, warum nimmst du ein externes Programm zum Senden einer E-Mail und nicht das Pythonmodule smtplib?
Re: Umstellung os.system zu subprocess
Verfasst: Mittwoch 14. Februar 2024, 05:58
von snafu
@imonbln
Der Elefant muss erst noch die Frage nach dem echo-Befehl verdauen...

Re: Umstellung os.system zu subprocess
Verfasst: Mittwoch 14. Februar 2024, 06:44
von Zeusdragoon
Wie die Sache mit dem Echo gezeigt hat bin ich nicht gerade Experte. Ich habe es mir damals auf jeden Fall angesehen. Denke das ich es nicht zum laufen bekommen habe.
Gruß Markus
Re: Umstellung os.system zu subprocess
Verfasst: Montag 19. Februar 2024, 19:38
von DeaD_EyE
Experten fallen nicht vom Himmel. Dafür muss man viel Zeit investieren und dran bleiben.
Man sollte bezüglich externer Programme immer nachsehen, ob Python so etwas nicht schon in der Standardbibliothek hat. Falls nicht, gibt es noch pypi.org. Wenn z.B.
smtplib zu nervig ist, da man sich gewissermaßen die E-Mail zusammenbauen muss, kann man z.B. das Modul
emails verwenden.