Subproceso multiplataforma con ventana oculta

Quiero abrir un proceso en segundo plano e interactuar con él, pero este proceso debería ser invisible tanto en Linux como en Windows. En Windows tienes que hacer algunas cosas con STARTUPINFO, mientras que esto no es válido en Linux:

ValueError: startupinfo solo es compatible con plataformas Windows

¿Hay una forma más sencilla de crear un comando Popen separado para cada 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) 

Puedes reducir una línea 🙂

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

Solo una nota: para Python 2.7 tengo que usar subprocess._subprocess.STARTF_USESHOWWINDOW lugar de subprocess.STARTF_USESHOWWINDOW .

No estoy seguro de que pueda ser mucho más simple de lo que ha hecho. Estás hablando de optimizar tal vez 5 líneas de código. Por el dinero, seguiría con mi proyecto y aceptaría esto como una consecuencia del desarrollo multiplataforma. Si lo haces mucho, crea una clase o función especializada para encapsular la lógica e importarla.

Puedes convertir tu código en:

 params = dict() if os.name == 'nt': startupinfo = subprocess.STARTUPINFO() startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW params['startupinfo'] = startupinfo proc = subprocess.Popen(command, **params) 

Pero eso no es mucho mejor.