Hallo alle Miteinander,
ich bin mal wieder völlig überfragt und google kann mir auch nicht so richtig helfen, da ich nicht genau weiß wonach ich suchen soll.
Folgendes: Ich habe ein Windowsprogramm, dieses hat einige Bugs, welche der Programmierer nicht beheben kann/will. Wegen dieser Bugs stürzt die Software in unregelmäßigen Abständen ab und reagiert nicht mehr auf klicks. Zu dem Programm gibt es definitiv keine Alternative, da es ein IO-Interface steuert. Da ich beim Start des Programm einige Tastatureingaben machen muss, starte ich das Programm mit pywinauto. Bisher habe ich es so versucht, das ich an das Interface eine Eingabe gesendet habe um zu sehen, ob die Software noch läuft und dann wollte ich die die applikation killen. Nur leider funktioniert das nicht, da von der Software gar keine Rückmeldung kommt und das restliche Pythonskript was um diesen Abschnitt läuft dann auch einfriert. Gibt es eine Möglichkeit bei pywinauto eine Methode gibt um zu sehen ob das Programm noch läuft. Oder kann ich mit try/except diesen Problem umgehen?
Wenn ich meine Frage zu undeutlich gestellt habe bitte ich um entschuldigung.
Gruß
Seavers
Rückmeldung von Software mit pywinauto
Ein Problem behoben.
Um ein exisitierendes Fenster auszuwählen man muss einfach eine neue Verbindung mit Hilfe von *.connect_(title = "Fenstername") herstellen.
Nächste Frage im selben Zusammenhang.
Gibt es die Möglichkeit zu sehen, ob ein Windows Programm irgendeine Rückmeldung gibt?
Wenn das Programm keine Rückmeldung gibt würde ich das gerne mit try:/eycept: abfangen, wäre das Klug oder gibt es bessere Methoden?
Ich habe das mal so Probiert, leider bleibt es bei Zeile 7 stecken, da das Programm keine Rückmeldung mehr gibt.
Um ein exisitierendes Fenster auszuwählen man muss einfach eine neue Verbindung mit Hilfe von *.connect_(title = "Fenstername") herstellen.
Nächste Frage im selben Zusammenhang.
Gibt es die Möglichkeit zu sehen, ob ein Windows Programm irgendeine Rückmeldung gibt?
Wenn das Programm keine Rückmeldung gibt würde ich das gerne mit try:/eycept: abfangen, wäre das Klug oder gibt es bessere Methoden?
Ich habe das mal so Probiert, leider bleibt es bei Zeile 7 stecken, da das Programm keine Rückmeldung mehr gibt.
Code: Alles auswählen
try:
#sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#sock.connect(('192.168.1.12', 10000))
sock.sendall('101 ST07 1\n') #gibt Anweisung das die Software etwas machen soll
sock.sendall('102 ST07\n') #fragt die Software nach einem Zustand ab
AnswST071=sock.recv(1024) #empfängt die Antwort es Zustandes
time.sleep(1.5)
sock.sendall('101 ST07 0\n')
sock.sendall('102 ST07\n')
AnswST070=sock.recv(1024)
except:
mailsending=mailsending() # schickt eine mail, dass das Programm abgestürzt ist
Controlboxkill() #ruft eine Funktion auf, die die socketverbindung schließt und das Programm killt
powerreset() #startet die Stromversorgung für die Hardware neu
Controlboxstart() #Startet die Software neu
Auch für Sockets kannst du ein Timeout setzen, schau dir dazu mal die settimeout-Methode an.
Das Leben ist wie ein Tennisball.
Das ist die Logfile von dem Windowsprogramm. Vielleicht kann damit noch jemand was anfangen.
[19:54:39] Error in LabNetEthernet, ReadDataThread: System.Threading.ThreadAbortException: Der Thread wurde abgebrochen.
bei System.Net.UnsafeNclNativeMethods.OSSOCK.recv(IntPtr socketHandle, Byte* pinnedBuffer, Int32 len, SocketFlags socketFlags)
bei System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags, SocketError& errorCode)
bei System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
bei System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
bei Versuch.Devices.LabNetEthernetDevice.ReadDataThread() in d:\Data\Projects\PhenoSoft Control\Versuch\Devices\LabNetEthernetDevice.cs:Zeile 382.
[19:54:39] Error in LabNetEthernet, SetOutOn: System.IO.IOException: In die Übertragungsverbindung können keine Daten geschrieben werden: Ein Blockierungsvorgang wurde durch einen Aufruf von WSACancelBlockingCall unterbrochen. ---> System.Net.Sockets.SocketException: Ein Blockierungsvorgang wurde durch einen Aufruf von WSACancelBlockingCall unterbrochen
bei System.Net.Sockets.Socket.Send(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
bei System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size)
--- Ende der internen Ausnahmestapelüberwachung ---
bei System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size)
bei Versuch.Devices.LabNetEthernetDevice.SetOutOn(LabNetOutputChannel channel) in d:\Data\Projects\PhenoSoft Control\Versuch\Devices\LabNetEthernetDevice.cs:Zeile 534.