raw_input

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.
Benutzeravatar
dodo
User
Beiträge: 73
Registriert: Mittwoch 10. November 2010, 13:43

Guten Tag,
ich möchte ein Programm mit Python schreiben, und habe keine Lust Grafik einzubinden, da das für den Zweck nicht nötig ist.
Ich habe in dem Programm 2 Threads (beide mit einer unendlichen while-Schleife), der eine verlangt eine Eingabe, und gibt Dinge aus. Der andere Thread überprüft nur bestimmte Dateien, aber dieser Thread soll eine Ausgabe tätigen, wenn etwas geschehen ist.
Doch dieser Thread kann keine Ausgabe tätigen, da die Ausgabe blockiert wird.
Das Hauptprogramm kann auch keine Ausgabe tätigen.
Nur der Eingabe-Thread kann eine Ausgabe tätigen, und eine Eingabe verlangen. Da dieser Thread aber eine raw_input beinhaltet, müsste ich diese abbrechen, den Thread beenden, und den anderen Thread seine Ausgabe tätigen lassen.
Dabei sollte das, was in dem raw_input schon eingegeben wurde, nicht verloren gehen, und derselbe Teil der Schleife soll wieder starten. An sich ist das kein Problem. Es gibt aber 3 Probleme:
1.raw_input() abbrechen
2.bisherige Eingabe in raw_input() in einer Variable speichern
3.Schleife an der selben Stelle neu starten(Das ist das kleinste Problem).

Es wäre schön, wenn mir jemand helfen könnte, das Problem zu lösen. Vielleicht gibt es ja eine andere Möglichkeit, die Ausgabe des einen Threads zu tätigen? Aber am besten sollten alle Ausgaben und Eingaben im selben Fenster stattfinden.

Danke schon einmal im Voraus.
Geht nicht gibts nicht(Das gilt auch für Python)!
lunar

@dodo: Parallele Ein- und Ausgabe lässt sich nur mit getrennten Bildschirmbereichen vernünftig umsetzen, so wie man das beispielsweise aus Chat-Programmen kennt. Alles andere ist kompliziert, fehleranfällig und für den Nutzer nur verwirrend. Du brauchst mithin eine Oberfläche, die über "raw_input()" hinausgeht. Auf der Konsole kannst Du beispielsweise urwid verwenden.

Alternativ kannst Du die Ausgaben auch einfach in eine Datei schreiben, die sich der Nutzer bei Bedarf dann ansehen kann. Das wäre die einfachste Lösung.

Btw, wäre es zu viel verlangt, einen Avatar ohne Animation zu verwenden?
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

@lunar, Den habe ich mit Hilfe meines Ad-Blockers entfernt.
the more they change the more they stay the same
lunar

@Dav1d: Nun ja, ich finde, man kann ja wenigstens höflich darauf hinweisen, dass dieses Dinge unsäglich lästig ist :)
deets

lunar hat geschrieben: Btw, wäre es zu viel verlangt, einen Avatar ohne Animation zu verwenden?
Du sprichst mir aus der Seele... Dancing Hamsters, anybody?
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Evtl. könnte es ja ein generelles Verbot von animierten Avataren in die Forenregeln schaffen.
lunar

@webspider: +1

Wobei der OP der Einzige ist, der hier einen animierten Avatar hat. Solange das nicht überhand nimmt, muss ja nicht gleich ein Verbot her, vor allem, wenn der OP der freundlichen Aufforderung, einen anständigen Avatar zu nehmen, folgt :)
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

In der Tat. Zumindest ich kenne recht wenige Foren, in denen einerseits animierte Avatare (und/oder Signaturen) erlaubt sind und andererseits es ein Großteil der Nutzer auch schafft diese professionell genug zu gestalten, damit sie einem nicht auf den Nerv gehen.

Ich befürchte dieses Forum wird leider nicht dazu gehören, allein schon weil ein Großteil der Nutzer Neulinge sind, die lediglich Antworten auf ein, zwei Fragen suchen. Von daher halte ich ein vorbeugendes Verbot durchaus für sinnvoll.
Benutzeravatar
dodo
User
Beiträge: 73
Registriert: Mittwoch 10. November 2010, 13:43

Dürfte ich freundlich darauf hinweisen, dass ich meine Frage(n) nicht deshalb gestellt habe, um keine vernünftige Antwort zu bekommen, oder gar wegen meinem Avatar beschimpft zu werden; Ich habe die Frage deshalb gestellt, weil ich eine vernünftige Antwort wollte.
lunar hat geschrieben:@dodo: Parallele Ein- und Ausgabe lässt sich nur mit getrennten Bildschirmbereichen vernünftig umsetzen, so wie man das beispielsweise aus Chat-Programmen kennt. Alles andere ist kompliziert, fehleranfällig und für den Nutzer nur verwirrend. Du brauchst mithin eine Oberfläche, die über "raw_input()" hinausgeht. Auf der Konsole kannst Du beispielsweise urwid verwenden.
urwid? Was soll das sein?

Ich habe so das Gefühl, dass das ganze im Terminal zu nichts führt...
Vielleicht sollte ich ja wegen der "Ein-Fenster-Ausgabe" doch z.B. pygame einbauen...
Wenn der wenigstens mit der Thread-Sache klarkommt :K ...
lunar hat geschrieben:Alternativ kannst Du die Ausgaben auch einfach in eine Datei schreiben, die sich der Nutzer bei Bedarf dann ansehen kann. Das wäre die einfachste Lösung.
Nee, das soll eine Meldung sein, die den Benutzer auf etwas hinweist, und zwar nicht erst dann, wenn er bemerkt, dass er im Programmordner eine .txt öffnen kann - Und der Benutzer würde sicher denken, das die .txt zum Programm gehört, und nichts sinnvolles enthält - Nein danke.
Geht nicht gibts nicht(Das gilt auch für Python)!
BlackJack

@dodo: Du hast neben vernünftiger Antwort einen Hinweis auf den Avatar bekommen. Wie Du siehst finden das mehrere Leute nervig. Die Folge von so etwas ist nicht nur, dass es angesprochen wird, sondern das Leute Dich einfach komplett deswegen ignorieren können, obwohl sie zu der eigentlichen Frage eine Antwort beitragen könnten.

`urwid`: http://duckduckgo.com/?q=urwid

Statt `pygame` wo Du erst noch so etwas wie ein Textfeld selber programmieren müsstest, würde sich vielleicht eher `Tkinter` anbieten was zur Standardbibliothek gehört und solche GUI-Elemente schon fertig anbietet.
lunar

@dodo: http://lmgtfy.com/?q=urwid, erster Treffer :roll:

Ich habe Dich nicht wegen Deines Avatars beschimpft, sondern Dich höflich darauf hingewiesen, dass dieses Ding ziemlich lästig ist, eine Ansicht, mit der ich offensichtlich nicht alleine stehe. Ich kann Dich nicht zwingen, einen anderen Avatar zu nutzen, ich habe lediglich darum gebeten. Es steht Dir frei, diese Bitte zu ignorieren, ebenso wie es mir freisteht, Deine Beiträge dann zu ignorieren.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

dodo hat geschrieben:Dürfte ich freundlich darauf hinweisen, dass ich meine Frage(n) nicht deshalb gestellt habe, um keine vernünftige Antwort zu bekommen, oder gar wegen meinem Avatar beschimpft zu werden; Ich habe die Frage deshalb gestellt, weil ich eine vernünftige Antwort wollte.
Noch mal ergänzend zu anderen: Du hast hier kein Anrecht oder gar eine Garantie auf "vernünftige" Antworten - je nach User oder auch Standpunkt kommen auch mal ganz unvernünftige Antworten ;-)

Was den Avatar angeht: Ich würde mir auch einen nicht animierten wünschen :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
deets

@dodo

Kein mir bekanntes GUI (und auch text-basierte GUIs sind GUIs) kommt mit mehrerer Threads klar. Bestenfalls gibt es wie zB in Qt einen thread-agnostischen Event-Mechanismus, der von alleine fuer eine injektion in den GUI-thread sorgt.

Will sagen: du wirst das mit einem thread machen muessen, und mit wesentlich mehr kontrolle ueber das Terminal. urwid mag da helfen, oder curses. Eine pygame-basierte GUI (oder Tkinter) geht natuerlich auch. Aber auch da alles in *EINEM* Thread! Was deine Hintergrund-Threads nicht stoert, aber da musst du explizit fuer sorgen, dass da von und in den main-thread kommuniziert wird.

Und last but not least: klemm dir deine Attituede, dir wuerde hier nicht hilfreich geantwortet. Sonst wird das zur selbsterfuellenden Prophezeiung. Denn der einfachste Weg, den Augenkrebs zu vermeiden, der durch ausfallende Smily-Augen entsteht ist, dich einfach auf die ignore-Liste zu setzten. Und da waerest du nach der letzten zaelhung schon bei einer Handvoll der erfahrensten Nutzer hier...
Benutzeravatar
dodo
User
Beiträge: 73
Registriert: Mittwoch 10. November 2010, 13:43

Ich habe meinen Avatar geändert.
Den neuen finde ich sowieso besser(den habe ich selbst mit GIMP gemacht)...
BlackJack hat geschrieben:urwid`: http://duckduckgo.com/?q=urwid
Ich hatte nicht vor, deswegen eine Software downloaden zu müssen :( .

Die vernünftigste Variante ist warscheinlich wxpython...
Ansonsten pygame.
Ich find dieses Problem langsam echt lästig. Vielleicht sollte ich mir die Mühe einfach sparen, die ganze Zeit zu googlen, in den Büchern zu stöbern... und einfach ein GUI verwenden, denn da hab ich das Problem mit print & Co nicht. Dazu kommt, dass ich die beiden threads dadurch auch getrennt nutzen kann, was den Vorteil hat, dass ich nicht die Eingabe unterbrechen muss :wink: .

Damit steht fest, dass es umständlicher wäre, kein GUI zu machen,als ein GUI zu nutzen, und deswegen ist das Problem eigentlich gelöst.
Aber ich bin immer noch offen für Vorschläge, die mir die Arbeit einfacher machen - (Die meisten) Programmierer(so wie ich) sind eben faul :D
Geht nicht gibts nicht(Das gilt auch für Python)!
deets

@dodo

Danke fuer den neuen Avatar.

Wieso du jetzt ein Problem mit dem *download* von urwid hast, obwohl auch pygame & wx 3rd-party-Pakete sind erschliesst sich mir zwar nicht so ganz - aber das musst du selbst wissen.
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

dodo hat geschrieben:Ich hatte nicht vor, deswegen eine Software downloaden zu müssen :( .
Es gibt noch „curses“ und „termios“ aus der Standardbibliothek, aber Urwid ist vermutlich komfortabler.
Benutzeravatar
dodo
User
Beiträge: 73
Registriert: Mittwoch 10. November 2010, 13:43

deets hat geschrieben:Danke fuer den neuen Avatar.
Gern geschehen.
deets hat geschrieben:Wieso du jetzt ein Problem mit dem *download* von urwid hast, obwohl auch pygame & wx 3rd-party-Pakete sind erschliesst sich mir zwar nicht so ganz - aber das musst du selbst wissen.
Mit Pygame kenn ich mich schon richtig aus, ich nutze Pygame dauernd.
Bei wxpython kenn ich mich noch nicht so aus. Aber Anfängerwissen ist schon da, und ich habe ein Buch über wxpython(Zumindest wird dort wxpython ein wenig erklärt).
Aber ich habe keine Lust eine neue Software zu downloaden, wo ich schon zwei habe, die super funktionieren.
nomnom hat geschrieben:Es gibt noch „curses“ und „termios“ aus der Standardbibliothek, aber Urwid ist vermutlich komfortabler.
Ich kann nicht wirklich gut englisch...
Aber ich habe ja schon eine Lösung.
Geht nicht gibts nicht(Das gilt auch für Python)!
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

dodo hat geschrieben:Aber ich habe keine Lust eine neue Software zu downloaden, wo ich schon zwei habe, die super funktionieren.
Das wird immer und immer wieder passieren. Klar kannst du dich dem verweigern (wie jemand anderes hier, der besonders allergisch auf Module à la itertools reagiert), aber es wird dir langfristig die Arbeit erleichtern (und dich dazu befähigen eleganteren/besseren/... Code als ohne andere Bibliotheken zu schreiben). Sieh es einfach als ein weiteres Werkzeug, das dein Repertoire erweitert (auswendig lernen musst du es ja nicht, es geht mehr darum die Konzepte dahinter zu verstehen).
Benutzeravatar
dodo
User
Beiträge: 73
Registriert: Mittwoch 10. November 2010, 13:43

webspider hat geschrieben:
dodo hat geschrieben:Aber ich habe keine Lust eine neue Software zu downloaden, wo ich schon zwei habe, die super funktionieren.
Das wird immer und immer wieder passieren. Klar kannst du dich dem verweigern (wie jemand anderes hier, der besonders allergisch auf Module à la itertools reagiert), aber es wird dir langfristig die Arbeit erleichtern (und dich dazu befähigen eleganteren/besseren/... Code als ohne andere Bibliotheken zu schreiben). Sieh es einfach als ein weiteres Werkzeug, das dein Repertoire erweitert (auswendig lernen musst du es ja nicht, es geht mehr darum die Konzepte dahinter zu verstehen).
Ich habe früher nicht mit Python angefangen, weil ich den Speicherplatz meines Rechners komplett verbrauchen wollte.
Geht nicht gibts nicht(Das gilt auch für Python)!
deets

Nee klar. So ein Modul mit ein paar Kilobytes, das ist natuerlich schon ganz schoen dramatisch in Zeiten, in denen man von Terabyte-Platten erschlagen wird....
Antworten