web-dev-qa-db-fra.com

Exécution de commandes Windows Shell avec python

Comment pouvons-nous interagir avec OS Shell en utilisant Python? Je souhaite exécuter des commandes Windows cmd via Python. Comment y parvenir?

44
Avi Mehenwal

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 .

60
Mike

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

os.system('python') example

12
Timidger

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)
11
crizCraig

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
2
ccy
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
1
srini-beerge