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)    
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top