2016-03-25 11 views
0

Aufgabe: Ich muss explorer.exe Prozess mit Sikuli neu starten.Wie man explorer.exe Prozess mit Sikuli (Jython) neu starten?

war meine Lösung Batch-Datei „RestartExplorerProcess.bat“ zu erstellen: mit

@echo off 
echo Your desktop is being restored, Please wait. . . 
ping -n 5 127.0.0.1 > NUL 2>&1 
echo Killing process Explorer.exe. . . 
taskkill /f /im explorer.exe 
cls 
echo Explorer.exe is killed! 
echo. 
echo Your desktop is now loading. . . 
ping -n 5 127.0.0.1 > NUL 2>&1 
echo. 
ping -n 5 127.0.0.1 > NUL 2>&1 
start %windir%\explorer.exe 
echo Explorer.exe was successfully started! 
exit 

und dann rief ich es:

subprocess.Popen(Path) 

Das Problem ist, dass ich das Ende des Neustart warten muß explorer.exe vor weiteren Aktionen. Ich fand 3 Lösungen:

1. p = subprocess.Popen(Path) 
    p.wait() 
2. subprocess.check_call(Path) 
3. os.system(Path) 

aber alle von ihnen hat die gleiche Wirkung - Sikuli zeigt keine Fehler und hängt nur. Vielleicht liege ich falsch, aber es sieht so aus, als würde ich beim Starten von explorer.exe einen Verweis verlieren, und ein Ereignis über die Fertigstellung der Batch-Datei kann niemals ausgeführt werden.

Also meine Fragen sind:

  1. Wie kann ich explorer.exe Prozess mit gemeinsamen Sikuli (Jython) Methode neu starten?
  2. Und wie kann ich die Fertigstellung meiner Batch-Datei mit einer Methode, die höher beschrieben wurde warten?
+0

Was verursacht den Hang? 'Popen' oder' p.wait() '? Wenn es 'p.wait()' ist, dann benutze die default 'wait()' Funktion und gib ein Zeitlimit an, das größer ist als die Zeit, die zum Starten von 'explorer.exe' benötigt wird. Verwenden Sie ein eindeutiges Bild für den Neustart von explorer.exe. – DuckPuncher

Antwort

0

Starten/Firefox neu starten (oder Internet Explorer) mit Sikuli verwende ich folgendes:

# Path to Firefox executable: 
PathFirefox = r"C:\Program Files (x86)\Mozilla Firefox\firefox.exe" 
# Open Firefox 
App.open(PathFirefox) 

Um zu überprüfen, ob eine App, die Sie aktiv ist, eine Definition schreiben könnte zu überprüfen, ob eine Anwendung aktiv ist oder nicht.
Zum Beispiel:

def appActive(appName): 
    call = 'TASKLIST', '/FI', 'imagename eq %s' % appName 
    # Get the tasklist result 
    proc = subprocess.Popen(call, shell=True, stdout=subprocess.PIPE) 
    # Trimming lines with information 
    output = proc.communicate()[0].strip().split('\r\n') 
    # If TASKLIST returns multiple lines, it is running. 
    if len(output) > 1 and appName in output[-1]: 
     print('Result: "%s" is running!' % appName) 
     return True 
    else: 
     print('Result: "%s" is NOT running!' % appName) 
     return False 

# Check if Eclipse and Firefox are running: 
appActive('eclipse.exe') 
appActive('firefox.exe') 
0

könnten Sie 2 Fledermaus erstellen: 1 zu töten und ein zweites neu zu starten. Danach können Sie prüfen, ob ein Desktop-Image vorhanden ist. Hier ist eine Funktion.

def restarExplorer(): 
    desktop_home = "your/file/location/desktop_home.png" 
    killExplorer = App("your/file/location/killExplorer.exe") 
    restartExplorer = App("your/file/location/restartExplorer.exe") 
    killExplorer.open() 
    sleep(3) # waiting 3 
    restartExplorer.open() 
    while not exists(desktop_home): # check if desktop button appears 
     sleep(1) # keep waiting 
    continue..