2012-05-26 16 views
6

Sto eseguendo uno script Python su Windows 7 che apre un sottoprocesso ogni pochi secondi. Questo sottoprocesso apre una finestra e cattura l'attenzione, interrompendo qualsiasi tentativo da parte dell'utente di eseguire il normale lavoro mentre lo script è in esecuzione. Non ho la possibilità di modificare il codice di sottoprocesso stesso. C'è un modo per designare tutti i sottoprocessi aperti da uno script Python come non focalizzati?Impedire la messa a fuoco delle finestre Python

CHIARIMENTO: Ho bisogno che la finestra si apra e sia visualizzabile/selezionabile, semplicemente non saltare immediatamente sopra tutto ciò che sta succedendo. In altre parole, deve aprirsi sullo sfondo, non forzare se stesso in primo piano.

risposta

3

Ecco come ho fatto questa ultima

# Hide the cmd prompt window 
startupinfo = subprocess.STARTUPINFO() 
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW 
startupinfo.wShowWindow = subprocess.SW_HIDE 
p = subprocess.Popen(args, startupinfo=startupinfo) 
+0

TL; DR, usa 'startupinfo.wShowWindow = 4' (testato solo su Windows 7) Il valore wShowWindow può apparentemente assumere più valori di solo sottoprocesso.SW_HIDE. I valori disponibili sono documentati nei documenti di Windows per [ShowWindow] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms633548 (v = vs.85) .aspx). Il valore rilevante è SW_SHOWNOACTIVATE e il valore per quell'enumerazione è 4. –

1

È possibile eseguire i processi con una varietà di bandiere con subprocess.call

Questo esempio esegue la console app senza interfaccia utente di sorta:

>>> import shlex, subprocess 
>>> subprocess.call("C:\Windows\some_console_app.exe", shell=True) 
Problemi correlati