2013-04-09 5 views
13

Spero che questo non sia un duplicato.subprocess.Popen in console diversa

Sto tentando di utilizzare subprocess.Popen() per aprire uno script in una console separata. Ho provato a impostare il parametro shell=True ma questo non ha funzionato.

Io uso un 32 bit Python 2.7 a 64 bit di Windows 7.

+0

Lei non ha mostrato un vero e proprio base di codice, quindi ho appena creato un esempio di comando di seguito basato su 'dir' in windows e' ls' in linux per elencare il contenuto della cartella. – Torxed

+0

@Torxed Ho provato il tuo codice e ci sono alcune cose che non mi piacciono: non vedo una nuova console che si apre. Vorrei creare una seconda console e poter leggere l'output del programma che eseguo con 'popen' nella nuova console. Nel mio programma principale, non ho bisogno dell'output del programma che eseguo con 'popen'. Ho solo bisogno di vederlo in una console diversa. Potresti fornire un esempio di come dovrebbe essere implementato? –

+0

Questo non era chiaro dalla descrizione del problema originale, perché vedi "aprire uno script in una console separata" è esattamente ciò che fa ".Popen()", e se controlli il tuo monitor di processo noterai che un cmd .exe viene lanciato da te chiamando '.Popen()', non è visibile perché è un sottoprocesso della tua applicazione ed è "disattivato". In genere non si aprono nuove finestre della GUI per eseguire attività, quindi posso chiederti perché lo vuoi? perché mi sembra che sia al contrario:/ – Torxed

risposta

3
from subprocess import * 

c = 'dir' #Windows 

handle = Popen(c, stdin=PIPE, stderr=PIPE, stdout=PIPE, shell=True) 
print handle.stdout.read() 
handle.flush() 

Se non utilizzare shell=True dovrete fornire Popen() con un elenco invece di una stringa di comando, ad esempio:

c = ['ls', '-l'] #Linux 

e quindi aprirlo senza guscio.

handle = Popen(c, stdin=PIPE, stderr=PIPE, stdout=PIPE) 
print handle.stdout.read() 
handle.flush() 

Questo è il modo più flessibile e manuale per chiamare un sottoprocesso da Python. Se si desidera solo l'uscita, andare per:

from subproccess import check_output 
print check_output('dir') 

per aprire una nuova finestra di console GUI ed eseguire X:

import os 
os.system("start cmd /K dir") #/K remains the window, /C executes and dies (popup) 
15

Per aprire in una console diversa, fare (testato su Win7/Python 3):

from subprocess import Popen, CREATE_NEW_CONSOLE 

Popen('cmd', creationflags=CREATE_NEW_CONSOLE) 

input('Enter to exit from Python script...') 

correlati

How can I spawn new shells to run python scripts from a base python script?

+0

è quello che stavo cercando, grazie :) ... ora devo impostare un tempo prima di lanciare il mio altro compito ... –

3

Ho provato creationflags = CREATE_NEW_CONSOLE su Win7/python 2.7 e ha funzionato anche.

+0

Questo dovrebbe essere piuttosto un commento sulla risposta effettiva, piuttosto che una risposta a parte. Puoi leggere http://stackoverflow.com/tour – gturri

+0

I nuovi utenti non possono commentare le risposte. L'unica opzione di David per una risposta era una nuova risposta. – ohhorob