Python系统命令 – os.system(),subprocess.call()

在這個教程中,我們將學習關於 Python 系統命令的知識。之前我們學習了Python 隨機數

Python 系統命令

在編寫 Python 程序時,您可能需要執行一些 shell 命令。例如,如果您使用 Pycharm 集成開發環境,您可能會注意到有在 github 上分享您的項目的選項。而且您可能知道文件傳輸是通過 git 來完成的,它是使用命令行操作的。因此,Pycharm 在後台執行一些 shell 命令來完成這個任務。但是,在這個教程中,我們將學習如何從您的 Python 代碼中執行一些基本的 shell 命令。

Python os.system() 函數

我們可以使用 os.system() 函數來執行系統命令。根據官方文檔的說法,它被實現為調用標準 C 函數 system(),並且具有相同的限制。

然而,如果命令生成任何输出,它将被发送到解释器的标准输出流。不建议使用此命令。在以下代码中,我们将尝试使用系统命令 git --version 来获取 git 的版本。

import os

cmd = "git --version"

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

以下输出是在已安装 git 的 ubuntu 16.04 中找到的。

git version 2.14.2
returned value: 0

请注意,我们没有将 git 版本命令的输出打印到控制台,它被打印出来是因为控制台在这里是标准输出流。

Python subprocess.call() 函数

在前一节中,我们看到 os.system() 函数运行良好。但执行 shell 命令的方式不被推荐。我们将使用 Python subprocess 模块来执行系统命令。我们可以通过使用 subprocess.call() 函数来运行 shell 命令。看下面的代码,它等同于之前的代码。

import subprocess

cmd = "git --version"

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

输出也将相同。

Python subprocess.check_output() 函数

到目前為止,我們使用Python的系統命令來執行操作。但我們無法操縱這些命令產生的輸出。使用subprocess.check_output()函數,我們可以將輸出存儲在一個變量中。

import subprocess

cmd = "date"

# 返回字節串作為輸出
returned_output = subprocess.check_output(cmd)

# 使用decode()函數將字節串轉換為字符串
print('Current date is:', returned_output.decode("utf-8"))

它將產生以下輸出

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

因此,在上述部分中,我們已經討論了關於執行Python系統命令的基本想法。但學習是無止境的。如果您願意,您可以從官方文檔中進一步了解有關使用subprocess模塊的Python系統命令。

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