web-dev-qa-db-fra.com

sous-processus.Ouvrir dans une console différente

J'espère que ce n'est pas un doublon.

J'essaie d'utiliser subprocess.Popen() pour ouvrir un script dans une console distincte. J'ai essayé de régler le Shell=True paramètre mais cela n'a pas fait l'affaire.

J'utilise un 32 bits Python 2.7 sur un Windows 7 64 bits.

20
Ionut Hulub
from subprocess import *

c = 'dir' #Windows

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

Si vous n'utilisez pas Shell=True, Vous devrez fournir à Popen() une liste au lieu d'une chaîne de commande, exemple:

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

puis ouvrez-le sans Shell.

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

Il s'agit de la manière la plus manuelle et flexible dont vous pouvez appeler un sous-processus à partir de Python. Si vous voulez juste la sortie, optez pour:

from subproccess import check_output
print check_output('dir')

Pour ouvrir une nouvelle fenêtre GUI de console et exécuter X:

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

Pour ouvrir dans une autre console, faites (testé sur Win7/Python 3):

from subprocess import Popen, CREATE_NEW_CONSOLE

Popen('cmd', creationflags=CREATE_NEW_CONSOLE)

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

En relation

Comment puis-je générer de nouveaux shells pour exécuter python à partir d'une base python?

23
Pedro Vagner

J'ai essayé creationflags = CREATE_NEW_CONSOLE sur Win7/python 2.7 et cela a également fonctionné.

4
David Wallace