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)    
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top