2017-10-15 8 views
0

J'explore l'utilisation de Python pour effectuer des tâches dans le CMD, en utilisant os.system()Comment effectuer des tâches multiples dans le CMD par Python dans le même terminal et sans la fermeture de la fenêtre

Cependant, je trouve quelques questions qui vous empêche de l'exécution de plus d'une commande via python, avec le problème que dès que la tâche est terminée, la fenêtre se ferme.

import os 

os.system('ipconfig', 'netstat') 

L'erreur qui est née de cela était que system() takes at most 1 argument (2 given)

import os 

os.system('ipconfig') 
os.system('netstat') 

Le problème qui se pose de cette idée est que dès que ipconfig avait terminé, j'ai été éjecté de la fenêtre et a commencé netstat dans un nouveau terminal. Après netstat avait fini, avant que je puisse lire les données reçues j'ai été éjecté de ce terminal aussi.

Comment puis-je exécuter deux commandes qui suivent l'une après l'autre, mais dans la même fenêtre? (Je serais capable de faire défiler et voir la commande précédente et ses données.) Et comment puis-je empêcher CMD de me éjecter de la fenêtre?

+0

Par défaut, CMD se connecte à une console, nouvellement attribuée ou héritée. Implicitement, vous exécutez une seule ligne de commande via 'cmd.exe/c', après quoi CMD se ferme, tout comme le processus hôte de la console (conhost.exe) car aucun processus n'y est attaché. En principe, bien que je ne le recommande pas en général, vous pouvez allouer votre propre console pour que CMD hérite. Par exemple: 'import os, ctypes;' 'ctypes.WinDLL ('kernel32') .AllocConsole();' 'os.system ('ipconfig');' 'os.system ('netstat')'. – eryksun

+0

Toutefois, il est préférable d'exécuter des commandes individuelles et de rediriger leur sortie pour une utilisation en Python, auquel cas vous pouvez même exécuter une application de console (par exemple ipconfig.exe) détachée, sans fenêtre de console gênante. Par exemple: 'sous-processus d'importation;' DETACHED_PROCESS = 8; 'result = subprocess.run ('ipconfig.exe', encoding = 'mbcs', créationflags = DETACHED_PROCESS, stdin = sous-processus.DEVNULL, stdout = subprocess.PIPE, stderr = subprocess.PIPE); 'print ('Return Code:', result.returncode);' 'print (result.stdout)'. – eryksun

Répondre

0

Utilisez os.system('command & pause')

« & » vous permet d'enchaîner plusieurs commandes dans la même fenêtre qui exécutera un après l'autre.

'Pause' Demande à l'utilisateur de sortir du terminal.