Ich versuche, Text mit mehreren Zeilen zu senden:
text = "This is a line 1
This is a line 2
This is a line 3"
in einem Python-Skript mit:
cmd = "echo {} | mail -s 'Test email' [email protected]".format(text)
os.system(cmd)
aber ich erhalte eine Fehlermeldung, weil neue Zeilen als Befehle interpretiert werden:
sh: line 1: This: command not found
ausdrucken, es ergibt sich:
echo This is line 1
This is line 2
This is line 3 | mail -s 'Test email' [email protected]
Ich denke, die Lösung ist einfach, aber ich habe keine nützliche Lösung gefunden.
🤔 А знаете ли вы, что...
Python позволяет создавать сценарии для автоматизации задач и обработки данных.
Das unmittelbare Problem besteht darin, dass Zeichenfolgen in der Shell in Anführungszeichen gesetzt werden müssen, wenn sie Zeilenumbrüche usw. enthalten. Siehe Wann eine Shell-Variable in Anführungszeichen gesetzt werden muss.
Aber im Grunde genommen willst du os.system
hier wirklich nicht so verwenden. Wie die Dokumentation Ihnen bereits sagt, möchten Sie im Allgemeinen subprocess
bevorzugen.
import subprocess
subprocess.run(
["mail", "-s", "Test email", "[email protected]"],
input=text, text=True, check=True)
oder verwenden Sie smtplib
, um E-Mails nativ zu senden (oder verwenden Sie umgekehrt Python überhaupt nicht, wenn Sie nur ein einfaches Shell-Skript benötigen, obwohl Sie dann immer noch die Anführungszeichen korrigieren müssten).
mail
ist schlecht portierbar. Wenn Sie dies also noch nicht auf Ihrem System getestet haben, kann es zu zusätzlichen Problemen kommen.
Siehe vielleicht auch Wie sende ich eine Datei als E-Mail-Anhang über die Linux-Befehlszeile?