2009-11-28 14 views
12

Ho un programma con una GUI che esegue un programma esterno tramite una chiamata Popen:Esecuzione di un processo in pythonw con Popen senza una console

p = subprocess.Popen("<commands>" , stdout=subprocess.PIPE , stderr=subprocess.PIPE , cwd=os.getcwd()) 
p.communicate() 

Ma una console si apre, indipendentemente da quello che faccio (I ho anche provato a passarlo NUL per l'handle del file). C'è un modo per farlo senza ottenere il binario che chiamo per liberare la sua console?

+0

Questi comandi vengono normalmente eseguiti in una console? Stai cercando di eseguire un altro programma GUI che non ha una console? –

risposta

24

Da here:

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"]) 
+0

Aha! Grazie. Non ho nemmeno notato quell'opzione in ... – sbirch

2

si potrebbe essere in grado di fare solo subprocess.Popen([command], shell=False).

Questo è quello che uso comunque. Salva tutte le assurdità dell'impostazione di flag e quant'altro. Una volta chiamato come .pyw o eseguito con pythonw, non dovrebbe aprire una console.

+0

shell = False è già l'impostazione predefinita, quindi non vedo cosa risolverà: https://docs.python.org/2/library/subprocess .html # subprocess.Popen – totaam

+1

'shell = False' non cambierà nulla, la soluzione è usare' shell = True' con un file '.pyw'. – ZeroFunter

1

solo fare subprocess.Popen([command], shell=True)

+0

Che file 'pyw'? Ha bisogno di eseguire un'applicazione esterna. –

+0

Funziona come un fascino. Non hai bisogno di un file '.pyw'. – vy32

0

Questo funziona bene in Win32API. Le altre soluzioni non funzionavano per me.

import win32api 
chrome = "\"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe\"" 
args = "https://stackoverflow.com" 

win32api.WinExec(chrome + " " + args) 
Problemi correlati