如何在 Python 中调用外部命令?

2023-09-21 17:28:24

调用操作系统的内部或外部命令以及启动系统中可用的任何其他应用程序都可以借助两个内置模块(os 模块和子进程模块)中定义的某些功能来实现。

首先,我们将使用os模块中的函数。

os.system() function

此函数接收一个字符串参数,该参数必须是有效的可执行命令。此函数通过调用 system() 函数(标准 C 函数)打开子 shell。输出(如果任何命令不会出现在 Python 控制台上)。 该函数在成功执行给定命令时返回 0,否则返回 1。

import os
os.system("dir *.md")

输出:

0

上面的代码片段将显示当前文件夹中.md文件。也可以调用在系统路径中找到其可执行文件 (.exe) 的任何应用程序。 以下内容将在单独的窗口中启动Windows操作系统中的计算器应用程序。

import os
os.system("calc")

输出:

0

os.popen() function

此函数打开一个管道流,用于与第一个参数命令创建的文件(如对象)进行通信。 此函数具有以下签名:

os.popen(cmd, mode, buffering)
  1. cmd:表示要调用的命令的字符串
  2. 模式:"r"或"w"决定管道的方向。
  3. 缓冲
  4. :系统的缓冲策略

以下命令打开输入管道,以逐行读取给定 dir 命令的输出。输出显示在Python shell的控制台上。

import os
pipe=os.popen("dir *.md")
print (pipe.read())

输出:

 Volume in drive C is Windows 10
 Volume Serial Number is 540D-CE99
 Directory of C:UsersUserDocumentsMyDocs
10/04/2020  12:48 PM             2,182 python-prog1.py
10/07/2020  09:34 PM             4,639 list.md
10/08/2020  12:54 AM             3,696 calc.py
10/06/2020  12:57 AM             3,315 help.md
               4 File(s)         13,832 bytes
               0 Dir(s)  175,492,399,104 bytes free

Python 标准库的子进程模块有两个用于调用外部命令的函数。此模块中函数的目的是生成一个新进程并连接到 IO 管道。

根据 PEP 324,建议使用 run() 函数调用新进程。

subprocess.run() function

此函数运行字符串参数中的命令,等待进程完成,以及 CompleteProcess 类的对象。以下用例 run() 函数在 Python shell 上的当前目录中显示 .ipynb 文件,并返回 CompleteProcess 实例,返回代码 = 0 表示成功执行。

import subprocess
subprocess.run("dir *.ipynb", shell=True)

输出:

CompletedProcess(args='dir *.ipynb', returncode=0)

subprocess.call() function

subprocess.call()函数是此模块的旧版本(在 Python 3.5 之前)的一部分。这类似于 run() 函数,但返回返回代码属性。

import subprocess
subprocess.call("cls", shell=True)

输出:

0

上面的命令调用 DOS 命令cls 。清除当前 shell 终端,函数返回 0 作为返回码。