Pergunta

Eu quero abrir um processo em segundo plano e interagir com ele, mas este processo deve ser invisível em Linux e Windows. No Windows você tem que fazer algumas coisas com STARTUPINFO, enquanto isso não é válida em Linux:

ValueError: STARTUPINFO só é suportado em plataformas Windows

Existe uma maneira mais simples de criar um comando Popen separada para cada sistema operacional?

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

Solução

Você pode reduzir uma linha:)

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

Outras dicas

Apenas uma nota:. Para Python 2.7 eu tenho que usar subprocess._subprocess.STARTF_USESHOWWINDOW vez de subprocess.STARTF_USESHOWWINDOW

Eu não tenho certeza que você pode obter muito mais simples do que você fez. Você está falando sobre como otimizar a talvez 5 linhas de código. Para o dinheiro que eu só iria continuar com meu projeto e aceitar isso como um consquence de desenvolvimento multi-plataforma. Se você fazê-lo muito, então, criar uma classe ou função especializada para encapsular a lógica e importá-lo.

Você pode transformar seu código em:

params = dict()

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

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

mas isso não é muito melhor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top