Exécuter une commande de terminal à partir de python dans une nouvelle fenêtre de terminal?
Le but ici est d'exécuter un nouveau fichier python dans un nouveau shell et existants fichier python dans un shell. Dire que j'ai deux fichiers, aaa.py et bbb.py. Disons pour simplifier que tous les aaa.py n'est...
subprocess.call('python bbb.py', shell=True)
...et permet de dire que bbb.py n'est...
print 'It worked'
L'objectif est maintenant d'exécuter aaa.py dans le terminal 1 et le préparer pour le lancement bbb.py dans le terminal 2. Je m'attends à quelque chose comme la commande ci-dessous pour exister, mais ne peut pas le comprendre.
subprocess.call_in_new_window('python bb.py', shell=True)
source d'informationauteur Evan Cathcart
Vous devez vous connecter pour publier un commentaire.
Il n'y a aucun moyen de le faire en général à partir d'un shell. Ce que vous avez à faire est de lancer le programme de terminal lui-même, ou certains lanceur de programme qui le fait pour vous. Et la façon de faire qui est différente pour chaque programme de terminal.
Dans certains cas,
os.startfile
à faire ce que vous voulez, mais cela ne va pas être universelle.Aussi, remarque en général, vous allez réellement besoin d'un chemin absolu de votre script, parce que la nouvelle fenêtre de terminal sera lance un nouveau shell et, par conséquent, n'a pas nécessairement le même répertoire de travail. Mais je vais ignorer que pour les exemples.
Avec Windows cmd, la meilleure façon de le faire est le
start
commande shell. Si la chose vousstart
est tout programme de ligne de commande, y comprispython
il va obtenir une nouvelle fenêtre cmd. Donc, quelque chose comme:OS X a une commande similaire,
ouvrir
. Et c'est un vrai programme plutôt qu'un shell de commande, de sorte que vous n'avez pas besoinshell=True
. Toutefois, l'exécution d'un programme de ligne de commande ou un script avecopen
n'a généralement pas d'ouvrir une nouvelle fenêtre de terminal. En fait, le but c'est de vous permettre d'exécuter des programmes comme s'ils étaient le double-cliqué sur l'icône dans le Finder, qui n'est jamais quelque chose dans le terminal, sauf si c'est un .fichier de commande.Ainsi, vous pouvez créer un temporaire
.command
fichier wrapper etopen
que; quelque chose comme ceci (non testé):Alternativement, vous pouvez indiquer explicitement
open
à l'utilisation du Terminal.app, quelque chose comme ceci:Ou vous pouvez créer un script de Terminal.app via AppleEvents. Par exemple:
La "script" de l'événement ouvre une nouvelle fenêtre et exécute son argument comme une commande. Si vous souhaitez un contrôle plus détaillé, ouvrez le dictionnaire de script dans l'Éditeur AppleScript et de voir toutes les choses amusantes que vous pouvez faire.
Sur Linux ou d'autres systèmes *nix... eh bien, il y a 65,102 différents environnements de bureau, de lanceurs, et le terminal de programmes. Avez-vous besoin de travailler sur eux tous?
Avec gnome-terminal, juste courir le terminal vous donne une nouvelle fenêtre, et la
-x
argument permet de spécifier une commande initiale, de sorte que:De nombreux anciens terminaux essayez d'être compatible avec
xterm
qui fait la même chose avec-e
donc:... etc.
Comment savez-vous que le terminal de l'utilisateur à l'aide? Bonne question. On pouvait marcher comme parent processus de vous jusqu'à ce que vous trouvez quelque chose qui ressemble à un terminal. Ou vous pouvez simplement supposer que tout le monde a
xterm
. Ou vous pouvez regarder comment les diverses distributions configurer un terminal par défaut et de recherche pour tous. Ou...Vous ne serez pas en mesure de le faire, du moins pas aussi simplement que vous y pensez. Je soupçonne que vous parlez d'un Mac à cause de la "fenêtre de terminal".
Vous pourriez être en mesure de la réaliser à l'aide du système X Window, mais vous aurez besoin d'un tas de choses à régler, X-serveurs, autorisations, etc. pour que cela se produise.
Ces jours-ci, de telles choses habituellement normal de violer les limites de sécurité. Dites que vous téléchargez un programme qui se comporte comme vous le suggérez. Il ouvre une fenêtre (terminal) (invisible pour vous) qui a les mêmes privilèges que vous avez. Il procède à la lecture de tous vos fichiers et répertoires et envoyé à l'auteur du programme. Vous pourriez ne pas être heureux avec cela. Tout le temps, vous pensez que vous jouez à un jeu, puis vous quittez, et la deuxième coquille continue de fonctionner.
Windows et les coques sont un peu disjoints.
Cela devrait probablement être un commentaire, mais puisque je ne peux pas encore...
Dans Windows , vous pouvez le faire: