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.
raw_input
@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?
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?
@lunar, Den habe ich mit Hilfe meines Ad-Blockers entfernt.
the more they change the more they stay the same
@Dav1d: Nun ja, ich finde, man kann ja wenigstens höflich darauf hinweisen, dass dieses Dinge unsäglich lästig ist 

Du sprichst mir aus der Seele... Dancing Hamsters, anybody?lunar hat geschrieben: Btw, wäre es zu viel verlangt, einen Avatar ohne Animation zu verwenden?
@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
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

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.
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.
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.
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 ...
urwid? Was soll das sein?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.
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 ...
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.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.
Geht nicht gibts nicht(Das gilt auch für Python)!
@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.
`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.
@dodo: http://lmgtfy.com/?q=urwid, erster Treffer 
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.

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.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
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 Antwortendodo 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.

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
assert encoding_kapiert
@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...
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...
Ich habe meinen Avatar geändert.
Den neuen finde ich sowieso besser(den habe ich selbst mit GIMP gemacht)...
.
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
.
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
Den neuen finde ich sowieso besser(den habe ich selbst mit GIMP gemacht)...
Ich hatte nicht vor, deswegen eine Software downloaden zu müssenBlackJack hat geschrieben:urwid`: http://duckduckgo.com/?q=urwid

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

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

Geht nicht gibts nicht(Das gilt auch für Python)!
@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.
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.
Gern geschehen.deets hat geschrieben:Danke fuer den neuen Avatar.
Mit Pygame kenn ich mich schon richtig aus, ich nutze Pygame dauernd.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.
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.
Ich kann nicht wirklich gut englisch...nomnom hat geschrieben:Es gibt noch „curses“ und „termios“ aus der Standardbibliothek, aber Urwid ist vermutlich komfortabler.
Aber ich habe ja schon eine Lösung.
Geht nicht gibts nicht(Das gilt auch für Python)!
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).dodo hat geschrieben:Aber ich habe keine Lust eine neue Software zu downloaden, wo ich schon zwei habe, die super funktionieren.
Ich habe früher nicht mit Python angefangen, weil ich den Speicherplatz meines Rechners komplett verbrauchen wollte.webspider hat geschrieben: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).dodo hat geschrieben:Aber ich habe keine Lust eine neue Software zu downloaden, wo ich schon zwei habe, die super funktionieren.
Geht nicht gibts nicht(Das gilt auch für Python)!
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....