Python执行Shell命令

  • 1、背景概述
  • 2、Python集成Shell及数据交互






1、背景概述



Python作为一种强大的脚本语言,其易用性和灵活性使得它成为自动化任务的理想选择。在Python中执行Shell脚本可以实现一些操作系统级的功能,使程序更加灵活、易理解和易维护

在某些场景下,我们可能需要在Python程序中执行Shell命令。这样的场景包括但不限于:

  • 自动化部署:在部署应用程序时,我们可能需要执行一系列Shell命令,例如创建文件夹、复制文件等
  • 系统管理:在管理服务器或操作系统时,我们可能需要执行一些Shell命令来获取系统信息、监控状态等
  • 数据处理:有时候,我们可能需要调用一些Shell命令来处理数据,例如使用grep、awk等命令进行文本处理

那么,如何在Python中执行Shell脚本及数据交互呢?

2、Python集成Shell及数据交互



2.1、os模块

os模块的system()函数提供了在Python中执行Shell脚本的一种简单方法

以下是一个示例:

import os

# 执行Shell命令
result = os.system("ls -l")
# 执行Shell脚本
result = os.system("shell_script.sh &")
# 执行Python脚本
result = os.system('python python_script.py &')

# 打印Shell命令/脚本的退出状态码
print(result)

值得注意的是,os模块的system()函数的返回值为该Shell命令/脚本的退出状态码,常见的退出状态码:0:命令成功执行;1:一般错误(非特定错误);2:错误的shell命令语法;126:命令不可执行;127:未找到命令

另外,os模块的system()函数是阻塞式的。system()函数在执行时会创建一个子进程执行命令,等子进程执行结束后才会返回到主进程中继续执行,同时子进程的执行结果无法影响主进程。因此,可以在命令/脚本后面添加运算符&,它将命令/脚本放在后台执行(非阻塞式)

2.2、Subprocess模块

Python的Subprocess模块提供了更灵活的方式来执行Shell命令/脚本,并获取其输出结果。Subprocess是Python标准库中推荐用来执行shell命令的模块

Subprocess模块提供了多个函数来执行Shell命令/脚本,其中最常用的有subprocess.run()函数和subprocess.call()函数,它们都会创建一个新的子进程,运行Shell脚本,等待其完成,然后返回一个CompletedProcess实例(阻塞式)

以下是一个示例:

import subprocess

# 执行Shell命令
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
# 执行Shell脚本
result = subprocess.run(['shell_script.sh &'], capture_output=True, text=True)

# 获取Shell命令/脚本的执行结果
print(result.stdout)

上述代码中,我们通过设置capture_output=True可以捕获命令/脚本的输出,并通过设置text=True将输出的字节类型自动转成字符串

subprocess.run()函数的返回值是一个CompletedProcess对象,其中包含了命令的执行结果。我们可以通过访问stdout属性来获取命令的标准输出。如果命令执行失败,subprocess.run()函数将会抛出一个CalledProcessError异常