Python-systeemcommando – os.system(), subprocess.call()

In deze tutorial zullen we meer leren over het Python Systeemcommando. Eerder hebben we geleerd over Python Willekeurig Nummer.

Python Systeemcommando

Tijdens het maken van een programma in Python, moet je mogelijk enkele shell-commando’s uitvoeren voor je programma. Bijvoorbeeld, als je de Pycharm IDE gebruikt, merk je misschien op dat er een optie is om je project op GitHub te delen. En je weet waarschijnlijk dat bestandsoverdracht wordt gedaan door git, dat wordt bediend met de commandoregel. Dus, Pycharm voert enkele shell-commando’s uit op de achtergrond om dit te doen. Echter, in deze tutorial zullen we wat basisprincipes leren over het uitvoeren van shell-commando’s vanuit je Python-code.

Python os.system() functie

We kunnen een systeemcommando uitvoeren door de os.system() functie te gebruiken. Volgens het officiële document is gezegd dat

Dit wordt geïmplementeerd door de standaard C-functie system() te bellen, en heeft dezelfde beperkingen.

Echter, als het commando uitvoer genereert, wordt deze naar de standaarduitvoerstroom van de interpreter gestuurd. Het gebruik van dit commando wordt niet aanbevolen. In de volgende code zullen we proberen de versie van git te achterhalen met behulp van het systeemcommando git --version.

import os

cmd = "git --version"

returned_value = os.system(cmd)  # returns the exit code in unix
print('returned value:', returned_value)

De volgende uitvoer wordt gevonden in Ubuntu 16.04 waar git al is geïnstalleerd.

git version 2.14.2
returned value: 0

Merk op dat we de uitvoer van het git-versiecommando niet naar de console afdrukken, het wordt afgedrukt omdat de console hier de standaarduitvoerstroom is.

Python subprocess.call() Functie

In de vorige sectie zagen we dat de os.system()-functie goed werkt. Maar het is geen aanbevolen manier om shell-commando’s uit te voeren. We zullen de Python subprocess-module gebruiken om systeemcommando’s uit te voeren. We kunnen shell-commando’s uitvoeren door de subprocess.call()-functie te gebruiken. Zie de volgende code die equivalent is aan de vorige code.

import subprocess

cmd = "git --version"

returned_value = subprocess.call(cmd, shell=True)  # returns the exit code in unix
print('returned value:', returned_value)

En de uitvoer zal ook hetzelfde zijn.

Python subprocess.check_output() functie

Tot nu toe hebben we de systeemcommando’s uitgevoerd met behulp van python. Maar we konden de uitvoer die door die commando’s wordt geproduceerd niet manipuleren. Met behulp van de subprocess.check_output()-functie kunnen we de uitvoer in een variabele opslaan.

import subprocess

cmd = "date"

# geeft uitvoer als byte-string
returned_output = subprocess.check_output(cmd)

# met de decode() functie om byte-string naar string te converteren
print('Current date is:', returned_output.decode("utf-8"))

Het zal output produceren zoals het volgende

Current date is: Thu Oct  5 16:31:41 IST 2017

Dus, in de bovenstaande secties hebben we gesproken over basisideeën over het uitvoeren van python systeemcommando. Maar er is geen limiet aan leren. Als je wilt, kun je meer leren over Python Systeemcommando met behulp van de subprocess-module uit de officiële documentatie.

Source:
https://www.digitalocean.com/community/tutorials/python-system-command-os-subprocess-call