2010-08-02 10 views
5

Duplicar posible:
Running a process in pythonw with Popen without a console¿Cómo elimino las consolas de Windows de los procesos engendrados en Python (2.7)?

estoy usando Python 2.7 en Windows para automatizar las conversiones por lotes RAW usando dcraw y PIL.

El problema es que abro una consola de Windows cada vez que ejecuto dcraw (lo cual ocurre cada dos segundos). Si ejecuto el script usando como .py es menos molesto ya que solo abre la ventana principal, pero preferiría presentar solo la GUI.

Estoy implica que de este modo:

args = [this.dcraw] + shlex.split(DCRAW_OPTS) + [rawfile] 
proc = subprocess.Popen(args, -1, stdout=subprocess.PIPE) 
ppm_data, err = proc.communicate() 
image = Image.open(StringIO.StringIO(ppm_data)) 

Gracias a Ricardo Reyes

revisión menor a la receta, en 2.7, parece que usted necesita para obtener STARTF_USESHOWWINDOW de _subprocess (se también podría usar pywin32 si desea algo que podría ser un poco menos propenso a cambiar), por lo que para la posteridad:

suinfo = subprocess.STARTUPINFO() 
suinfo.dwFlags |= _subprocess.STARTF_USESHOWWINDOW 
proc = subprocess.Popen(args, -1, stdout=subprocess.PIPE, startupinfo=suinfo) 

Respuesta

6

Debe configurar el parámetro updateinfo al llamar a Popen.

He aquí un ejemplo de una Activestate.com Recipe:

import subprocess 

def launchWithoutConsole(command, args): 
    """Launches 'command' windowless and waits until finished""" 
    startupinfo = subprocess.STARTUPINFO() 
    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW 
    return subprocess.Popen([command] + args, startupinfo=startupinfo).wait() 

if __name__ == "__main__": 
    # test with "pythonw.exe" 
    launchWithoutConsole("d:\\bin\\gzip.exe", ["-d", "myfile.gz"]) 
Cuestiones relacionadas