Rückmeldung von Software mit pywinauto

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.
Antworten
seavers
User
Beiträge: 11
Registriert: Donnerstag 31. Juli 2014, 11:46

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
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Ich kenne mich mit pywinauto nicht aus, aber dessen Funktionen scheinen alle ein Timeout zu haben.
Das Leben ist wie ein Tennisball.
seavers
User
Beiträge: 11
Registriert: Donnerstag 31. Juli 2014, 11:46

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.

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
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Auch für Sockets kannst du ein Timeout setzen, schau dir dazu mal die settimeout-Methode an.
Das Leben ist wie ein Tennisball.
seavers
User
Beiträge: 11
Registriert: Donnerstag 31. Juli 2014, 11:46

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.
Antworten