Python 执行 Shell 命令

在Python编程中,有时候我们需要执行一些外部的Shell命令来完成一些任务,比如调用系统命令、执行脚本等。Python提供了多种方法来执行Shell命令,本文将介绍其中的几种常用方法。

方法一:使用os.system()函数

os.system()函数可以在Python中执行Shell命令,它会直接调用操作系统的Shell来执行指定的命令。下面是一个简单的例子:

import os

os.system("ls")

上面的代码会执行ls命令,即列出当前目录下的文件和文件夹。os.system()函数执行命令后,会返回命令的退出状态码。如果命令执行成功,返回值为0;如果命令执行失败,返回值为非零值。

需要注意的是,os.system()函数会直接将命令结果输出到终端,而不会将结果作为函数的返回值。如果需要获取命令的输出结果,可以使用os.popen()函数。

方法二:使用subprocess.run()函数

subprocess.run()函数是Python 3.5及以上版本中新增的一个函数,它可以方便地执行Shell命令,并获取命令的输出结果。下面是一个示例:

import subprocess

result = subprocess.run(["ls", "-l"], capture_output=True, text=True)
print(result.stdout)

上面的代码会执行ls -l命令,并将命令的输出结果保存在result.stdout中。capture_output=True参数用于捕获命令的输出结果,text=True参数用于将输出结果以文本形式返回。

subprocess.run()函数的返回值是一个CompletedProcess对象,包含了命令的退出状态码、输出结果等信息。可以通过访问CompletedProcess对象的属性来获取这些信息。

方法三:使用subprocess.Popen()

subprocess.Popen()类是Python提供的一个强大的工具,可以用于执行复杂的Shell命令,并控制命令的执行过程。下面是一个示例:

import subprocess

process = subprocess.Popen(["ping", "-c", "4", "www.baidu.com"], stdout=subprocess.PIPE)
output, error = process.communicate()

print(output.decode("utf-8"))

上面的代码会执行ping -c 4 www.baidu.com命令,即向百度服务器发送4个ICMP回显请求,并获取命令的输出结果。

subprocess.Popen()类的构造函数接受一个命令列表作为参数,其中第一个元素是要执行的命令,后面的元素是命令的参数。stdout=subprocess.PIPE参数用于将命令的输出结果保存在管道中,以便后续读取。communicate()方法用于等待命令执行完成,并获取命令的输出结果。

方法四:使用第三方库sh

除了Python自带的模块,还有一些第三方库可以用来执行Shell命令,比如sh库。sh库是一个基于Python的跨平台Shell命令执行库,它提供了一种更简洁、更直观的方式来执行Shell命令。下面是一个示例:

import sh

result = sh.ls("-l")
print(result)

上面的代码使用sh库执行了ls -l命令,并将命令的输出结果保存在result变量中。可以直接将命令和参数作为函数调用的方式来执行Shell命令。

需要注意的是,sh库是一个第三方库,需要使用pip命令安装:

pip install sh

总结

本文介绍了Python中执行Shell命令的几种常用方法,包括使用os.system()函数、subprocess.run()函数、subprocess.Popen()类和第三方库sh。根据不同的需求,可以选择适合自己的方法来执行Shell命令。

执行Shell命令是Python编程中的一个常见需求,掌握这些方法可以帮助我们更好地与操作系统进行交互,完成各种任务。

注意:执行Shell命令需要谨慎处理