Hi Leute,
ich bin ein totaler Python-Newbie und möchte einige AutoIt-Scripte in Python neu schreiben.
Das geht soweit ganz gut, jedoch bei der Funktion 'HotKeySet(key, function)' taucht die Frage auf,
wie ich das in Python abbilden kann.
Was HotKeySet tut: beim Drücken der Hotkey-Taste
*wird die Abarbeitung des laufenden Scriptes angehalten und die in HotKeySet angegebene Funktion ausgeführt*.
Das ist der springende Punkt: 'anhalten des laufenden Scriptes'.
Ich habs probiert mit suspend/resumeThread, das klappt aber nicht.
Das Ganze soll dazu dienen, ein laufendes Script zu einem beliebigen Zeitpunk durch Drücken der Pausetaste anzuhalten und durch ein weiteres Drücken der Pausetaste das Script weiterlaufen zu lassen.
In C/C++ würde ich das mit einem Signalhandler machen...
Frage: wie könnte ein Lösungsansatz aussehen?
Danke fürs Lese und Tipps
Wolf
Pause toggle
Danke; leider bin ich auf Windows 7.darktrym hat geschrieben:Evtl. über Prozesse und Signale.
Hab's probiert (siehe code), bring error 'ValueError: invalid signal value'
Code: Alles auswählen
import os, signal
def h(s, f):
print("s=%s f=%s" %(s, f))
signal.signal(signal.CTRL_BREAK_EVENT, h)
pid = os.getpid()
print("PID=%d" %(pid))
os.kill(pid, signal.CTRL_BREAK_EVENT)
print("END")
Hat noch jemand eine Idee?
Danke,
Wolf
@wg01 Gewöhne Dir bitte an, den kompletten Traceback zu zeigen, nicht nur den Teil, den Du für wichtig hältst. Es wäre beispielsweise wichtig, zu wissen, in welcher Zeile Deines Quelltexts der Fehler auftritt.
Laut Dokumentation lässt sich "CTRL_BREAK_EVENT" nur mit "os.kill()" verwenden:
Ich sehe gerade nicht so richtig, wo Dein Problem ist. Du willst das Skript bis zum Auftreten eines bestimmten Ereignisses anhalten? Gut, dann musst Du doch nur synchron auf dieses Ereignis warten. Wie genau das aussieht, hängt von der Art Deines Skripts ab, und dazu hast Du bist jetzt nichts weiter gesagt. Läuft das Skript im Terminal, hat es eine graphische Oberfläche, oder läuft es vollständig im Hintergrund? In jedem dieser Fälle gibt es eine andere, mehr oder weniger komplizierte Lösung, um das Skript bis zu einem Tastendruck anzuhalten.
Laut Dokumentation lässt sich "CTRL_BREAK_EVENT" nur mit "os.kill()" verwenden:
Mithin kannst Du es nicht als Argument an "signal.signal()" übergeben.The signal corresponding to the CTRL+BREAK keystroke event. This signal can only be used with os.kill().
Ich sehe gerade nicht so richtig, wo Dein Problem ist. Du willst das Skript bis zum Auftreten eines bestimmten Ereignisses anhalten? Gut, dann musst Du doch nur synchron auf dieses Ereignis warten. Wie genau das aussieht, hängt von der Art Deines Skripts ab, und dazu hast Du bist jetzt nichts weiter gesagt. Läuft das Skript im Terminal, hat es eine graphische Oberfläche, oder läuft es vollständig im Hintergrund? In jedem dieser Fälle gibt es eine andere, mehr oder weniger komplizierte Lösung, um das Skript bis zu einem Tastendruck anzuhalten.
Ah ja, hast recht, da war ich nachlässig...lunar hat geschrieben:@wg01 Gewöhne Dir bitte an, den kompletten Traceback zu zeigen,...
Ja, habs dann auch in der Doku gesehen.lunar hat geschrieben:Mithin kannst Du es nicht als Argument an "signal.signal()" übergeben.
Also das Programm (Objekterkennung) soll folgendes tun:
Scannen von Bildern (tausende) über C-Scnittstelle.
Der 64x64 Pixel grosse Bereich, der aktuell gescannt wird, wird durch ein Rechteck gekennzeichnet. Das Rechteck wandert sozusagen durchs Bild.
Das Scanresultat wird pro Schritt in einem GUI dargestellt.
>>> Offener Punkt: da sollte man das Ganze anhalte können, um zu sehen was der Scan erkannt hat.
Das Ganze ist z.Zt. teilweise schon mit AutoIt realisiert, insbesondere der Punkt Pause/Resume Verarbeitung.
Ich will's jedoch in Python sehen.
Wie geht das?lunar hat geschrieben:...dann musst Du doch nur synchron auf dieses Ereignis warten...
Z.Zt. sehe ich fürs Abfangen von WindowsEvents (Kbd/Mouse) unter tk die Funktion mainloop() odert mit pythoncom Pump[Waiting]Messages().
Pause/Restart geht damit aber nur nach PumpMessages()/mainloop() und nicht an einem beliebigen Punkt im Programm.
Noch Ideen?
Danke für Tipps
Wolf