Wie können wir mit Python mit der Betriebssystem-Shell interagieren? Ich möchte Windows Cmd-Befehle über Python ausführen. Wie kann es erreicht werden?Windows-Shell-Befehle mit Python ausführen
Antwort
Die neueren subprocess.check_output
und ähnliche Befehle sollen os.system
ersetzen. Details siehe this page. Während ich dies auf Windows nicht testen können, sollten folgende Arbeiten:
from subprocess import check_output
check_output("dir C:", shell=True)
check_output
gibt eine Zeichenfolge der Ausgabe von Ihrem Befehl. Alternativ dazu führt subprocess.call
nur den Befehl aus und gibt den Status des Befehls zurück (normalerweise 0, wenn alles in Ordnung ist).
Beachten Sie auch, dass in Python 3 diese Zeichenfolgenausgabe nun bytes
ausgegeben wird. Wenn Sie dies ändern in einen String möchten, müssen Sie so etwas wie
from subprocess import check_output
check_output("dir C:", shell=True).decode()
Falls erforderlich, you can tell it die Art der Kodierung der Programmausgaben. Der Standardwert ist utf-8
, was normalerweise gut funktioniert, aber andere Standardoptionen sind here.
Das funktioniert in Windows 7. Danke. Es gibt \ r \ n am Ende der Zeichenfolge zurück, so dass Sie es möglicherweise mit einem '[0: -2]' Teilstring ausstreichen müssen. –
Die Verwendung von '[0: -2]' für diesen Zweck macht mich nervös. Wenn jemand diesen Code verwendet, um ihn in einem Nicht-Windows-Kontext anzuwenden, wird er das offensichtliche 'dir C:' in 'ls' oder was auch immer ändern. Aber sie könnten leicht übersehen, dass "[0: -2]" in "[0: -1]" geändert werden sollte. Ich würde stattdessen ['.rstrip()'] (https://docs.python.org/2/library/stdtypes.html#str.rstrip) empfehlen, was auf jeder Plattform funktioniert (es sei denn, Sie möchten andere erfassen) trailing whitespace), und macht auch den Grund für die String-Änderung klarer. – Mike
@Mikw: Ich habe einen Windows-Befehl, der für die Bereitstellung verwendet wird. Nur eine einzige Befehlszeile. Wie kann ich es von einem externen Python3.4-Skript aufrufen –
Sie würden das OS-Modul system method verwenden.
Sie nur in der Zeichenfolge Form des Befehls gesetzt, ist der Rückgabewert die Fenster Variable COMSPEC für Ökologie
Zum Beispiel:
os.system ('Python') öffnet sich der Windows-Eingabeaufforderung und läuft der python-Interpreter
Sidetip: Verwenden Sie 'alt + prtscr', um nur einen Screenshot des aktiven Fensters zu erhalten. ;) – Anonsage
Danke für diesen Tipp. Obwohl die Dokumentation die Verwendung von [subprocess module] (https://docs.python.org/3.4/library/os.html#os.system) empfiehlt, finde ich dieses Python für einfache Aufgaben. – Igor
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
Refactoring von @ srini-beerge Antwort, die die Ausgabe und den Return-Code kann
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)
Sie das, wie unten subprocess
Paket mit dem Code verwenden wird:
import subprocess
cmdCommand = "python test.py" #specify your cmd command
process = subprocess.Popen(cmdCommand.split(), stdout=subprocess.PIPE)
output, error = process.communicate()
print output
Verwandte: [ Ist es möglich, Python als Shell-Ersatz zu verwenden?] (Http://programmers.stackexchange.com/q/182077) –