Mehrzeiligen Input von der Konsole lesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
samy-delux
User
Beiträge: 44
Registriert: Donnerstag 26. April 2007, 19:23

Hey Leute,

Ich würde gerne wissen, wie ich einen mehrzeiligen Input von der Konsole aus ermöglichen kann.
raw_input() nimmt ja immer nur eine Zeile an!

so long,
Samy
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

In welchem Zusammenhang willst du das? Eine feste Anzahl von Zeilen? Wozu willst du das einsetzen?
samy-delux
User
Beiträge: 44
Registriert: Donnerstag 26. April 2007, 19:23

Ich würde gerne mein sendmail durch ein python Skript ersetzen, was die mail auf bestimmte smtp server weiterverteilt!
Das heißt, keine Feste Anzahl an Zeilen. Und es muss genau so funktionieren wie "sendmail -t -i"!
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Eine unglaublich dämliche Idee von mir, aber vllt willst du es ja so oO'...

Code: Alles auswählen

rows = ""
print "Hier kommt eine mehrzeilige Eingabe:"
while True:
    rows += raw_input()
    if rows.endswith("\n"):
        break
    else:
        rows += "\n"
print rows
(Die mehrzeilige Eingabe endet beim 2maligen Druck auf Enter... Sozusagen eine leere Eingabe machst. Das Problem ist halt, dass du keine wirklichen Absätze machen kannst... aber da kannst du ja auch was irgendwie herausfinden, vllt.)
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Ansonsten noch ein alter Beitrag meinerseits: http://www.python-forum.de/topic-7216.html?highlight=

Vielleicht steht da ja noch was sinnvolles drinne.


MfG EnTeQuAk
lunar

Ohne raw_input ist das einfacher:

Code: Alles auswählen

print "Bitte Text eingeben. STRG+D zum Beenden drücken"
text = sys.stdin.read()
Jetzt kannst du ganze Romane schreiben, und danach drückst du einfach STRG+D (für End Of File, das ist die Kombination unter Linux, unter Windows kenne ich sie nicht), und dein Roman steht in text.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

lunar hat geschrieben:STRG+D (für End Of File, das ist die Kombination unter Linux, unter Windows kenne ich sie nicht)
Unter Windows ist es STRG+Z.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
samy-delux
User
Beiträge: 44
Registriert: Donnerstag 26. April 2007, 19:23

Super! Das funktioniert sehr gut!
samy-delux
User
Beiträge: 44
Registriert: Donnerstag 26. April 2007, 19:23

Eine weitere Frage hätte ich jedoch noch:

Code: Alles auswählen

To: adresse@gmx.de
Subject: Kilu.de Testmail!
From: absender@domain.de
Wie kann ich hieraus am besten die Werte "To:" und "From:" isolieren? In PHP wäre das für mich kein Problem, aber in Python bin ich noch nicht so bewandert!
lunar

samy-delux hat geschrieben:Eine weitere Frage hätte ich jedoch noch:

Code: Alles auswählen

To: adresse@gmx.de
Subject: Kilu.de Testmail!
From: absender@domain.de
Wie kann ich hieraus am besten die Werte "To:" und "From:" isolieren? In PHP wäre das für mich kein Problem, aber in Python bin ich noch nicht so bewandert!

Code: Alles auswählen

import email

message = email.message_from_string(mail)
print message['to']
print message['from']
Remington Steele
User
Beiträge: 51
Registriert: Donnerstag 22. November 2012, 21:50

lunar hat geschrieben:Ohne raw_input ist das einfacher:

Code: Alles auswählen

print "Bitte Text eingeben. STRG+D zum Beenden drücken"
text = sys.stdin.read()
Jetzt kannst du ganze Romane schreiben
Ich wollte das auch probieren, leider bekomme ich die Fehlermeldung:
"Attributeerror: Debug output instance has no attribute 'read'

Bei mir sieht das so aus

Code: Alles auswählen

def test:
           text = None
           (...)
           text = sys.stdin.read()
           print text
Woran liegt das? Danke...
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Wo ist der Vorteil dabei das über die Konsole abzuwickeln? Warum nicht ein GUI schreiben und die E-Mails dort reinsetzen? Sollte doch auch laufen???
BlackJack

@Remington Steele: Du solltest das Programm vielleicht auch in einer Textkonsole ausführen und nicht in einer IDE die sonstwas am Laufzeitsystem von Python verbiegt.
Remington Steele
User
Beiträge: 51
Registriert: Donnerstag 22. November 2012, 21:50

hm also mein Programm ist dermassen simpel und der Dateninput relativ klein, so dass das Programm wohl meist nur eine Sekunde läuft. Hättet Ihr doch einen Tipp, was an meiner Lösung falsch ist? Danke...
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Hast du denn schon ausprobiert, was BlackJack gesagt hat?
Das Programm in der normalen Konsole ausgeführt?
Remington Steele
User
Beiträge: 51
Registriert: Donnerstag 22. November 2012, 21:50

Wenn ich das ganze in einer Python Shell ausführe, bekomme ich ebenfalls eine ähnliche Meldung: "AttributeError: read".

Da stimmt doch was nicht?
karolus
User
Beiträge: 141
Registriert: Samstag 22. August 2009, 22:34

Nicht in der Python_Shell in der normalen Shell:
>> python dein_Script.py

Karolus
Remington Steele
User
Beiträge: 51
Registriert: Donnerstag 22. November 2012, 21:50

Hm aber wenn ich das jetzt in der Eingabeaufforderung eingebe, kann ich nicht mehrere Zeilen kopieren und diese einfügen, wie ich es mir vorstelle. Gibt es noch ein anderes "Shell"?
JonasR
User
Beiträge: 251
Registriert: Mittwoch 12. Mai 2010, 13:59

KLar geht das, bin mir nicht sicher was du macht oO
Remington Steele
User
Beiträge: 51
Registriert: Donnerstag 22. November 2012, 21:50

edit (D.post)
Zuletzt geändert von Remington Steele am Donnerstag 6. Dezember 2012, 15:51, insgesamt 1-mal geändert.
Antworten