so starten Sie ein Kommando-Fenster von Python

Möchte ich die Verwendung von Python 2.6 auf Windows-Start mehrerer separate - Befehl von windows, die jeweils Ihr eigenes Python-Skript. Der Zweck ist: diese Kunden, und ich bin versucht zu laden, bis die server mit Anfragen von mehreren quasi-unabhängige clients.

Brauche ich nicht für die Kommunikation mit dem AUFTRAGGEBER während oder nach dem laufen, aber ich brauche zu senden, die jeweils eine andere commmandline arg, und ich möchte jedem client die Ausgabe zum Blättern in seinem eigenen "Konsole".

Aus der DOS-Eingabeaufforderung, den Befehl "start" tut, was ich möchte. Ich kann entweder:

start perf_test.py 2

oder

start cmd /c perf_test.py 3

oder

start cmd /c python perf_test.py 4

(Diese wird für Sie arbeiten, wenn Sie Ihre "file associations" setup korrekt *.py-Dateien. Es gibt andere threads auf, dass, wenn Sie Hilfe benötigen. Oder, verwenden Sie vollständige Pfade zu python exe und/oder Ihrem Skript.)

Meine Herausforderung ist: Wie bekomme ich den gleichen Effekt von Python?

Mit subprocess Bibliothek, ich habe versucht, Variationen wie dieses:

from subprocess import *
p = Popen(["perf_test.py", "4"], shell=True, stdin=PIPE)

Aber auch mit shell=True die Ausgabe miteinander vermischt, in die Fenster bin ich auch schon ausgeführt. Hinzufügen stdout=PIPE hält, aber dann muss ich Lesen p.stdout oder verwenden Sie p.communicate(). Hinzufügen von "cmd", um den Popen bekommt etwa das gleiche:

p = Popen(["cmd", "/c", "perf_test.py", "4"], shell=True, stdin=PIPE)

Keiner der oben um den Effekt, den ich Suche, die lautet: "pop öffnen Sie eine neue, individuelle Fenster für das Skript und sehen Sie sich seine Ausgabe Blättern Sie durch in Ihre eigene Konsole" (weil ich wirklich ausführen möchten N diese clients parallel).

Eine andere Sache, wandte ich mich fast funktioniert es auch.

import os
os.startfile("perf_test.py")

Diese sofort zurückgegeben, und eine tatsächliche dosbox öffnet sich. Yay! Erfolg! Das ist, bis ich versuchen, ein argument hinzufügen. Dies schlägt fehl:

os.startfile("perf_test.py 5")

mit dem Fehler "The system cannot find The file specified"... denn es ist das hinzufügen von "[SPACE]5" an den Dateinamen an. (Der Zweck der Argumentation ist, dass jeder "perf_test" muss eine ID zugewiesen, so dass Sie auf dem server als verschiedene Instanzen.)

Andere Ansätze, die ich betrachtet habe, und wirklich nicht mögen, aus verschiedenen Gründen:

  • Führen jedes "perf_test" in einem eigenen thread. (Aber ich wirklich wollen, um die Ausgabe zu sehen jeder in seiner eigenen Konsole.)
  • Meine eigenen pseudo-Konsolen mit Tk. (Bild werde ich einfach auf verschiedene threading-Probleme gibt es.)
  • Dynamisch schreiben .BAT-Datei on-the-fly mit den Zeilen "start perf_test.py 1", "start perf_test.py 2", usw., dann starten Sie, die .BAT-Datei mit Popen oder startfile.

Ich erwarten, den letzten funktioniert... und ich denke, ist mein letzter Ausweg, wenn ich nicht bekommen kann ein Python-Skript zu tun, direkt.

Vielen Dank für jeden input /Einblicke!

Wollen Sie jede Konsole geöffnet bleiben, nachdem Sie das Python-Skript die Ausführung beendet?

InformationsquelleAutor Dan H | 2012-10-05

Schreibe einen Kommentar