Le plus récent subprocess.check_output et des commandes similaires sont censés remplacer os.system. Voir cette page pour plus de détails. Bien que je ne peux pas le tester sur Windows, la suivante devrait fonctionner:
from subprocess import check_output
check_output("dir C:", shell=True)
check_output retourne une chaîne de caractères de la sortie de votre commande. Sinon, subprocess.call juste exécute la commande et renvoie l'état de la commande (généralement 0 si tout est ok).
À noter également que, dans python 3, que la sortie de chaîne est maintenant bytes de sortie. Si vous voulez changer cela dans une chaîne, vous 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 de votre programme de sorties. La valeur par défaut est utf-8, qui fonctionne généralement bien, mais d'autres options standard sont ici.
Cela fonctionne dans Windows 7. Merci. Il ne retour \r\n à la fin de la chaîne, de sorte que vous pourriez avoir besoin de bande avec un [0:-2] sous-chaîne.
À l'aide de [0:-2] pour cela me rend nerveux. Si quelqu'un prend ce code afin de l'appliquer dans un non-contextuel de Windows, ils vont certainement changer l'évidence dir C: à ls ou quoi que ce soit. Mais ils peuvent facilement ne parviennent pas à réaliser que [0:-2] doit être modifié pour [0:-1]. Je le recommande .rstrip() au lieu de cela, qui fonctionne sur toutes les plateformes (sauf si vous voulez capturer un autre fuite des espaces), et permet également à l'origine de la chaîne d'altération plus clair.
J'ai une commande de windows qui est utilisé pour le déploiement.Une seule ligne de commande. Comment puis-je l'appeler à partir d'un externe python3.4 script
Utilisez simplement le code ci-dessus, mais en remplaçant dir C: avec quel que soit votre seule ligne de code.
dans windows 7, tous les retours sont perdus, la sortie est dur à lire...
Je n'ai pas accès à toutes les machines windows, mais je devine que vous êtes à l'aide de python 3. Si oui, vous voudrez peut-être regarder dans le universal_newlines argument.
Fonctionne sous Win 10 avec une légère modification: check_output("dir C:\\" shell=True)
À l'aide de shlex.split() peut être utile au moment de déterminer la bonne segmentation en unités pour args, surtout dans les cas complexes. Il aide également à s'échapper de l'anti-slash pour Windows. Voir la note dans la documentation Python. docs.python.org/3/library/subprocess.html#popen-constructor
Vous venez de mettre dans le formulaire de chaîne de la commande, la valeur de retour est le windows enrivonment variable COMSPEC
Par exemple:
os.système('python') ouvre l'invite de commande windows et les pistes de l'interpréteur python
Sidetip: Utilisation alt+prtscr pour simplement faire une capture d'écran de la fenêtre active. 😉
Merci pour cette astuce. Bien que la documentation recommande l'utilisation de sous-processus module, je trouve cela plus pythonic pour des tâches simples.
Refactoring de @srini-beerge réponse 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 isnotNone:raiseException('cmd %s failed, see above for details', cmd)
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
Le plus récent
subprocess.check_output
et des commandes similaires sont censés remplaceros.system
. Voir cette page pour plus de détails. Bien que je ne peux pas le tester sur Windows, la suivante devrait fonctionner:check_output
retourne une chaîne de caractères de la sortie de votre commande. Sinon,subprocess.call
juste exécute la commande et renvoie l'état de la commande (généralement 0 si tout est ok).À noter également que, dans python 3, que la sortie de chaîne est maintenant
bytes
de sortie. Si vous voulez changer cela dans une chaîne, vous besoin de quelque chose commeSi nécessaire, vous pouvez le dire le type de codage de votre programme de sorties. La valeur par défaut est
utf-8
, qui fonctionne généralement bien, mais d'autres options standard sont ici.[0:-2]
sous-chaîne.[0:-2]
pour cela me rend nerveux. Si quelqu'un prend ce code afin de l'appliquer dans un non-contextuel de Windows, ils vont certainement changer l'évidencedir C:
àls
ou quoi que ce soit. Mais ils peuvent facilement ne parviennent pas à réaliser que[0:-2]
doit être modifié pour[0:-1]
. Je le recommande.rstrip()
au lieu de cela, qui fonctionne sur toutes les plateformes (sauf si vous voulez capturer un autre fuite des espaces), et permet également à l'origine de la chaîne d'altération plus clair.dir C:
avec quel que soit votre seule ligne de code.universal_newlines
argument.Vous utilisez le module os méthode de système de.
Vous venez de mettre dans le formulaire de chaîne de la commande, la valeur de retour est le windows enrivonment variable COMSPEC
Par exemple:
os.système('python') ouvre l'invite de commande windows et les pistes de l'interpréteur python
alt+prtscr
pour simplement faire une capture d'écran de la fenêtre active. 😉Refactoring de @srini-beerge réponse qui obtient la sortie et le code de retour
Vous pouvez utiliser le
subprocess
colis avec le code comme ci-dessous: