Uruchamianie poleceń powłoki windows z Pythonem

Jak możemy współdziałać z powłoką OS używając Pythona ? Chcę uruchomić polecenia cmd systemu Windows przez python. Jak można to osiągnąć ?

Author: Avi Mehenwal, 2013-02-15

5 answers

Nowsze subprocess.check_output i podobne komendy mają zastąpić os.system. Zobacz ta strona po szczegóły. Chociaż nie mogę tego przetestować w systemie Windows, powinno działać:

from subprocess import check_output
check_output("dir C:", shell=True)

check_output zwraca ciąg wyjścia z polecenia. Alternatywnie, subprocess.call po prostu uruchamia polecenie i zwraca status polecenia (Zwykle 0, jeśli wszystko jest w porządku).

Zauważ również, że w Pythonie 3, to wyjście łańcuchowe jest teraz bytes output. Jeśli chcesz zmienić to na ciąg, możesz need something like

from subprocess import check_output
check_output("dir C:", shell=True).decode()

Jeśli to konieczne, możesz powiedzieć rodzaj kodowania wyjść programu. Domyślnie jest to utf-8, które zazwyczaj działa dobrze, ale inne standardowe opcje to tutaj .

 45
Author: Mike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-04 05:06:06

Można użyć modułu systemu operacyjnego Metoda systemowa .

Wystarczy umieścić w postaci ciągu poleceń, zwracaną wartością jest zmienna enrivonment systemu Windows COMSPEC

Na przykład:

Os.system ('python') otwiera wiersz poleceń systemu windows i uruchamia interpreter Pythona

os.przykład systemu ('python')

 10
Author: Timidger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-15 15:24:24

Refaktoryzacja odpowiedzi @ srini-beerge, która pobiera wyjście i Kod powrotu

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)
 7
Author: crizCraig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-09 20:00:58
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
Author: srini-beerge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-04 10:52:13

Możesz użyć subprocess pakietu z kodem jak poniżej:

import subprocess
cmdCommand = "python test.py"   #specify your cmd command
process = subprocess.Popen(cmdCommand.split(), stdout=subprocess.PIPE)
output, error = process.communicate()
print output
 0
Author: ccy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-24 06:39:17