Sottoprocesso multipiattaforma con finestra nascosta
-
06-07-2019 - |
Domanda
Voglio aprire un processo in background e interagire con esso, ma questo processo dovrebbe essere invisibile sia in Linux che in Windows. In Windows devi fare alcune cose con STARTUPINFO, mentre questo non è valido in Linux:
ValueError: startupinfo è supportato solo su piattaforme Windows
Esiste un modo più semplice della creazione di un comando Popen separato per ciascun sistema operativo?
if os.name == 'nt':
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
proc = subprocess.Popen(command, startupinfo=startupinfo)
if os.name == 'posix':
proc = subprocess.Popen(command)
Soluzione
Puoi ridurre una riga :)
startupinfo = None
if os.name == 'nt':
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
proc = subprocess.Popen(command, startupinfo=startupinfo)
Altri suggerimenti
Solo una nota: per Python 2.7 devo usare subprocess._subprocess.STARTF_USESHOWWINDOW
invece di subprocess.STARTF_USESHOWWINDOW
.
Non sono sicuro che puoi diventare molto più semplice di quello che hai fatto. Stai parlando di ottimizzare forse 5 righe di codice. Per i soldi vorrei solo andare avanti con il mio progetto e accettarlo come una conseguenza dello sviluppo multipiattaforma. Se lo fai molto, crea una classe o una funzione specializzata per incapsulare la logica e importarla.
Puoi trasformare il tuo codice in:
params = dict()
if os.name == 'nt':
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
params['startupinfo'] = startupinfo
proc = subprocess.Popen(command, **params)
ma non è molto meglio.