Question

Je souhaite ouvrir un processus en arrière-plan et interagir avec celui-ci, mais ce processus doit être invisible sous Linux et Windows. Sous Windows, vous devez utiliser STARTUPINFO, alors que cela n’est pas valable sous Linux:

  

ValueError: startupinfo n'est pris en charge que sur les plates-formes Windows

Existe-t-il un moyen plus simple que de créer une commande Popen distincte pour chaque système d'exploitation?

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)    
Était-ce utile?

La solution

Vous pouvez réduire une ligne:)

startupinfo = None
if os.name == 'nt':
    startupinfo = subprocess.STARTUPINFO()
    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
proc = subprocess.Popen(command, startupinfo=startupinfo)

Autres conseils

Remarque: pour Python 2.7 , je dois utiliser sous-processus._subprocess.STARTF_USESHOWWINDOW au lieu de sous-processus.STARTF_USESHOWWINDOW .

Je ne suis pas sûr que vous puissiez être beaucoup plus simple que ce que vous avez fait. Vous parlez d'optimiser peut-être 5 lignes de code. Pour l'argent, je voudrais simplement poursuivre mon projet et l'accepter comme une conséquence du développement multiplate-forme. Si vous le faites souvent, créez une classe ou une fonction spécialisée pour encapsuler la logique et l'importer.

Vous pouvez transformer votre code en:

params = dict()

if os.name == 'nt':
    startupinfo = subprocess.STARTUPINFO()
    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
    params['startupinfo'] = startupinfo

proc = subprocess.Popen(command, **params)

mais ce n'est pas beaucoup mieux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top