BlackJack hat geschrieben:Also wenn Du jetzt ein Neuling wärst, hätte ich erst einmal gefragt, was Du für die Hausaufgabe denn bisher versucht hast.
Im Grunde bin ich, was Python angeht, ein Neuling, und das Arbeiten mit subprocess ist für mich völliges Neuland; gelegentlich mal ein subprocess.call(), das war's. Aber das ändert sich ja gerade.
Also: Mein Code war deinem schon recht ähnlich. Ich hatte für die einzelnen Pipes mittels Popen() entsprechende Objekte erstellt und stdin und stdout eingestellt. Was mir überhaupt nicht bewusst war, war, dass ich für das Anlegen der abschließenden Datei ein eigenes Dateiobjekt öffnen muss. Ich wollte den letzten Strom halt irgendwie "umleiten", wusste aber auch nicht wie.
Weiteres Problem, das sich aber erst gezeigt hat, als ich dank deines Codebeispiels dieses Problem lösen konnte, war, dass "-name 'My Window'" nicht als EIN Parameter, sondern als zwei Parameter aufgefasst werden.
Im Unterschied zu deinem Code hatte ich communicate() statt wait() verwendet, was sich jetzt - wo der Rest funktioniert - auch als der anscheinend bessere Weg gezeigt hat. Mit wait() hat sich das Programm an der Stelle aufgehängt. Wenn ich es in eine Tkinter-Anwendung einbaue (da soll es mal hin), dann hängt die Anwendung an der Stelle und die angelegte Bilddatei, bleibt zunächst leer. Erst wenn ich das Programm beende, wird der Prozess abgeschlossen und der Screenshot erstellt.
Fazit: Dein Code hat die entscheidende Hilfe geliefert, Screenshot funktioniert jetzt wie er soll.
@lunar: Danke für den Hinweis. Hat mich veranlasst, mir nochmal die möglichen Optionen von ImageMagicks "import" anzusehen und dann auch dort ein "-silent" zu entdecken. Das war mir bisher durchgegangen und weil mich das "klingeln" gestört hat, habe ich diesen Weg nicht weiter verfolgt.
Du meinst das?
Daraus die Window-ID extrahieren und dann z.B.
Werde ich mal ausprobieren.
Etwas lästig und ggf. auch problematisch finde ich bei beiden Lösungen, dass es über den Namen (in der Titelleiste) läuft. Was ich will - s.o. - ist ein Screenshot aus einer Tkinter-Anwendung heraus, die sich selbst knipst. Gibt es eine Möglichkeit, die benötigte Window-ID anders zu ermitteln als über den Namen des Fensters?