comment lancer une fenêtre de commande à partir de Python
Je voudrais utiliser la version 2.6 de Python sur Windows pour lancer plusieurs séparé de commande windows, exécutant chacun leur propre script Python. Le but est: ce sont des clients, et je suis en train de charger le serveur de requêtes à partir de plusieurs quasi-indépendant des clients.
Je n'ai pas besoin de communiquer avec le client pendant ou après la course, mais j'ai besoin d'envoyer à chacun un commmandline arg, et j'aimerais que chaque client est sortie pour faire défiler dans son propre "console".
À partir de la ligne de commande DOS, le "début" de la commande fait ce que je voudrais. Je peux soit:
start perf_test.py 2
ou
start cmd /c perf_test.py 3
ou
start cmd /c python perf_test.py 4
(Il va travailler pour vous si vous avez votre fichier "associations" de l'installation correctement.py fichiers. Il y a d'autres fils sur ce, si vous avez besoin d'aide. Ou, utiliser les chemins d'accès complets à l'python exe et/ou de votre script.)
Mon défi, c'est: Comment puis-je obtenir le même effet, à partir de Python?
À l'aide de subprocess
bibliothèque, j'ai essayé de variations comme ceci:
from subprocess import *
p = Popen(["perf_test.py", "4"], shell=True, stdin=PIPE)
Mais même avec shell=True
, la sortie est mélangée dans la fenêtre, je suis déjà en cours d'exécution. L'ajout de stdout=PIPE
s'arrête, mais puis-je le lire p.stdout
ou de l'utilisation p.communicate()
. L'ajout de "cmd" pour le Popen obtient environ le même:
p = Popen(["cmd", "/c", "perf_test.py", "4"], shell=True, stdin=PIPE)
Aucune de parvenir à l'effet, je suis à la recherche, qui est: "pop ouvrir une nouvelle fenêtre distincte pour ce script, et de regarder sa sortie défiler dans sa propre console" (parce que je veux vraiment courir N de ces clients en parallèle).
Une autre chose que je me suis tourné vers presque œuvres, trop.
import os
os.startfile("perf_test.py")
Cela renvoie immédiatement, et une réelle dosbox pop-up. Yay!!! Succès! C'est, jusqu'à ce que j'essaie d'ajouter un argument. Cette échoue:
os.startfile("perf_test.py 5")
avec message d'erreur "Le système ne peut pas trouver le fichier spécifié"... parce que c'est l'ajout de "[ESPACE]5" pour le nom de fichier. (Le but de l'argument est que chaque "perf_test" doit avoir une identification attribué, de sorte que ils ont frappé le serveur que les différentes instances.)
D'autres approches que j'ai vu, et n'aime vraiment pas, pour diverses raisons:
- Exécuter chaque "perf_test" dans son propre thread. (Mais j'ai vraiment envie de voir la sortie de chacun dans sa propre console.)
- Faire mon propre pseudo-consoles, avec les Savoirs traditionnels. (Figure je vais frapper les différents problèmes de threading).
- Dynamiquement écrire un .Fichier BAT à la volée avec les lignes "démarrer perf_test.py 1", "start perf_test.py 2", etc., puis de le lancer .Fichier BAT avec
Popen
oustartfile
.
J'attends le dernier... et je suppose que c'est mon dernier recours, si je ne peux pas obtenir un script Python pour le faire directement.
Merci pour toute entrée /points de vue!
OriginalL'auteur Dan H | 2012-10-05
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser:
OriginalL'auteur Rod
Code :
OriginalL'auteur assassin44037
Bien j'ai eu le même problème. Il a été résolu avec cette méthode.
Vous devriez Essayer:
OriginalL'auteur PGC channel