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

Code: Alles auswählen

python -c "echo ... | ..."
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.