Comment pouvons-nous interagir avec OS Shell en utilisant Python? Je souhaite exécuter des commandes Windows cmd via Python. Comment y parvenir?
Le plus récent subprocess.check_output
et les commandes similaires sont supposés remplacer os.system
. Voir cette page pour plus de détails. Bien que je ne puisse pas tester cela sous Windows, les opérations suivantes devraient fonctionner:
from subprocess import check_output
check_output("dir C:", Shell=True)
check_output
renvoie une chaîne de la sortie de votre commande. Sinon, subprocess.call
exécute simplement la commande et renvoie le statut de la commande (généralement 0 si tout va bien).
Notez également que, dans python 3, cette sortie de chaîne est maintenant bytes
sortie. Si vous voulez changer cela en chaîne, vous avez besoin de quelque chose comme:
from subprocess import check_output
check_output("dir C:", Shell=True).decode()
Si nécessaire, vous pouvez le dire le type de codage des sorties de votre programme. La valeur par défaut est utf-8
, qui fonctionne normalement, mais les autres options standard sont ici .
Vous utiliseriez le module os méthode système .
Vous venez de mettre sous la forme de chaîne de la commande, la valeur de retour est la variable Windows enrivonment COMSPEC
Par exemple:
os.system ('python') ouvre l'invite de commande Windows et exécute l'interprète python
Refactoring de la réponse de @ srini-beerge qui obtient la sortie et le code de retour
import subprocess
def run_win_cmd(cmd):
result = []
process = subprocess.Popen(cmd,
Shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
for line in process.stdout:
result.append(line)
errcode = process.returncode
for line in result:
print(line)
if errcode is not None:
raise Exception('cmd %s failed, see above for details', cmd)
Vous pouvez utiliser le paquet subprocess
avec le code ci-dessous:
import subprocess
cmdCommand = "python test.py" #specify your cmd command
process = subprocess.Popen(cmdCommand.split(), stdout=subprocess.PIPE)
output, error = process.communicate()
print output
import subprocess
result = []
win_cmd = 'ipconfig'(curr_user,filename,ip_address)
process = subprocess.Popen(win_cmd,
Shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE )
for line in process.stdout:
print line
result.append(line)
errcode = process.returncode
for line in result:
print line