Subproceso multiplataforma con ventana oculta
-
06-07-2019 - |
Pregunta
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, debe hacer algunas cosas con STARTUPINFO, mientras que esto no es válido en Linux:
ValueError: startupinfo solo es compatible con plataformas Windows
¿Existe una forma más sencilla que 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)
Solución
Puede reducir una línea :)
startupinfo = None
if os.name == 'nt':
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
proc = subprocess.Popen(command, startupinfo=startupinfo)
Otros consejos
Solo una nota: para Python 2.7 tengo que usar subprocess._subprocess.STARTF_USESHOWWINDOW
en lugar de subprocess.STARTF_USESHOWWINDOW
.
No estoy seguro de que puedas ser mucho más simple de lo que has hecho. Estás hablando de optimizar quizás 5 líneas de código. Por el dinero, simplemente continuaría con mi proyecto y lo aceptaría como una consecuencia del desarrollo multiplataforma. Si lo hace mucho, cree una clase o función especializada para encapsular la lógica e importarla.
Puede convertir su 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.