2013-04-09 14 views
13

Ich hoffe, das ist kein Duplikat. Ich versuche subprocess.Popen() zu verwenden, um ein Skript in einer separaten Konsole zu öffnen. Ich habe versucht, den shell=True Parameter zu setzen, aber das hat den Trick nicht gemacht.subprocess.Popen in verschiedenen Konsole

Ich verwende einen 32-Bit-Python 2.7 auf einem 64-Bit-Windows-7.

+0

Sie nicht eine tatsächliche zeigten code base, also habe ich mir unten ein Befehlsbeispiel gebildet, basierend auf 'dir 'in Windows und' ls' in linux zum Auflisten von Ordnerinhalten. – Torxed

+0

@Torxed Ich habe deinen Code ausprobiert und es gibt ein paar Dinge, die ich nicht mag: Ich sehe keine neue Konsole. Ich möchte eine zweite Konsole erstellen und in der Lage sein, die Ausgabe des Programms zu lesen, das ich mit 'popen' in der neuen Konsole starte. In meinem Hauptprogramm brauche ich nicht die Ausgabe des Programms, das ich mit 'popen' ausführe. Ich muss es nur in einer anderen Konsole sehen. Könnten Sie bitte ein Beispiel dafür geben, wie dies umgesetzt werden sollte? –

+0

Das war nicht klar aus Ihrer ursprünglichen Problembeschreibung, weil Sie sehen, "Öffnen Sie ein Skript in einer separaten Konsole" das ist genau was '.Popen()' tut, und wenn Sie Ihren Prozessmonitor überprüfen, werden Sie feststellen, dass ein cmd .exe wird gestartet, indem Sie '.Popen()' aufrufen, es ist einfach nicht sichtbar, da es sich um einen Subprozess Ihrer Anwendung handelt und dieser "stummgeschaltet" ist. Normalerweise öffnen Sie keine neuen GUI-Fenster, nur um Aufgaben auszuführen. Darf ich fragen, warum Sie das wollen? weil es rückwärts zu mir klingt:/ – Torxed

Antwort

3
from subprocess import * 

c = 'dir' #Windows 

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

Wenn Sie Sie müssen nicht shell=True verwenden werden Popen() mit einer Liste anstelle einer Befehlsfolge, Beispiel liefern:

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

und öffnen Sie es dann ohne Schale.

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

Dies ist die manuelle und flexible Möglichkeit, einen Subprozess von Python aus aufzurufen. gehen Wenn Sie nur den Ausgang wollen, für:

from subproccess import check_output 
print check_output('dir') 

Um ein neues Konsole GUI-Fenster zu öffnen und ausführen X:

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

Um in einer anderen Konsole zu öffnen, tun (getestet auf Win7/Python 3):

from subprocess import Popen, CREATE_NEW_CONSOLE 

Popen('cmd', creationflags=CREATE_NEW_CONSOLE) 

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

Verwandte

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

+0

das ist, was ich gesucht habe, danke :) ... jetzt muss ich ein Tempo einstellen, bevor ich meine andere Aufgabe starte ... –

3

Ich habe creationflags = CREATE_NEW_CONSOLE auf Win7/Python 2.7 versucht und das hat auch funktioniert.

+0

Dies sollte eher ein Kommentar zur eigentlichen Antwort sein, als eine Antwort für sich. Vielleicht möchten Sie http://stackoverflow.com/tour lesen – gturri

+0

Neue Benutzer können Antworten nicht kommentieren. Davids einzige Option für eine Antwort war eine neue Antwort. – ohhorob

Verwandte Themen