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?
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
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