Python如何执行shell脚本

Python如何执行shell脚本

自从出了Pyhon3.5之后,os模块下的system()+os.popen(),基本被废弃了。
因此如下只介绍2种方式:
一、使用commands模块,有三个方法可以使用:

(1)commands.getstatusoutput(cmd),其以字符串的形式返回的是输出结果和状态码,即(status,output)。

(2)commands.getoutput(cmd),返回cmd的输出结果。

(3)commands.getstatus(file),返回ls -l file的执行结果字符串,调用了getoutput,不建议使用此方法

在这里插入图片描述
在这里插入图片描述

二、subprocess模块 : (这个是常用方法)
允许创建很多子进程,创建的时候能指定子进程和子进程的输入、输出、错误输出管道,执行后能获取输出结果和执行状态。

(1)subprocess.run():python3.5中新增的函数, 执行指定的命令, 等待命令执行完成后返回一个包含执行结果的CompletedProcess类的实例。

语法说明:subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, timeout=None, check=False, universal_newlines=False)

(2)subprocess.call():执行指定的命令, 返回命令执行状态, 功能类似os.system(命令)。
语法说明:subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False, timeout=None)
 
(3)subprocess.check_call():python2.5中新增的函数, 执行指定的命令, 如果执行成功则返回状态码, 否则抛出异常。
语法说明: subprocess.check_call(args, *, stdin=None, stdout=None, stderr=None, shell=False, timeout=None)

# coding=utf-8

import shlex
import datetime
import subprocess
import time
  
def execute_command(cmdstring, cwd=None, timeout=None, shell=False):
  """执行一个SHELL命令
      封装了subprocess的Popen方法, 支持超时判断,支持读取stdout和stderr
      参数:
    cwd: 运行命令时更改路径,如果被设定,子进程会直接先更改当前路径到cwd
    timeout: 超时时间,秒,支持小数,精度0.1秒
    shell: 是否通过shell运行
  Returns: return_code
  Raises: Exception: 执行超时
  """
  if shell:
    cmdstring_list = cmdstring
  else:
    cmdstring_list = shlex.split(cmdstring)
  if timeout:
    end_time = datetime.datetime.now() + datetime.timedelta(seconds=timeout)
   
  #没有指定标准输出和错误输出的管道,因此会打印到屏幕上;
  sub = subprocess.Popen(cmdstring_list, cwd=cwd, stdin=subprocess.PIPE,shell=shell,bufsize=4096)
   
  #subprocess.poll()方法:检查子进程是否结束了,如果结束了,设定并返回码,放在subprocess.returncode变量中 
  while sub.poll() is None:
    time.sleep(0.1)
    if timeout:
      if end_time <= datetime.datetime.now():
        raise Exception("Timeout:%s"%cmdstring)
       
  return str(sub.returncode)
  
if __name__=="__main__":
  print execute_command("ls")

也可以在Popen中指定stdin和stdout为一个变量,这样就能直接接收该输出变量值。

总结

在python中执行SHELL有时候也是很必须的,比如使用Python的线程机制启动不同的shell进程,目前subprocess是Python官方推荐的方法,其支持的功能也是最多的,推荐大家使用。

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python可以通过subprocess模块执行shell脚本。可以使用subprocess.call()函数来执行shell命令或脚本,也可以使用subprocess.Popen()函数来执行shell命令或脚本,并获取其输出。例如: 使用subprocess.call()函数执行shell脚本: import subprocess subprocess.call(['./test.sh']) 使用subprocess.Popen()函数执行shell脚本,并获取其输出: import subprocess p = subprocess.Popen(['./test.sh'], stdout=subprocess.PIPE) output, err = p.communicate() print(output.decode('utf-8')) ### 回答2: Python是一种非常流行的编程语言,它可以与Shell脚本进行交互,执行Shell命令或脚本。在Python中,我们可以使用多种方法来执行Shell脚本。下面介绍几种方法。 1.使用os模块 Python的os模块提供了许多与操作系统交互的功能,包括执行Shell脚本。我们可以使用os.system或os.popen来执行Shell脚本。例如: import os os.system("./test.sh") 这行代码将执行名为test.sh的Shell脚本。 2.使用subprocess模块 Python的subprocess模块也可以用来执行Shell脚本。与os模块不同,subprocess提供了更高级的功能,如控制Shell脚本的输入和输出。例如: import subprocess subprocess.call("./test.sh", shell=True) 这行代码使用subprocess.call来执行test.sh脚本shell=True是必须的,因为我们需要告诉Python使用shell执行命令。 3.使用os.exec*系列函数 除了os.system和os.popen之外,Python的os模块还提供了许多其他函数来执行Shell脚本,如os.execvp、os.execvpe、os.execl、os.execle等。它们与subprocess相似,提供了更高级的功能。例如: import os os.execl("/bin/bash", "/bin/bash", "-c", "./test.sh") 以上代码使用os.execl调用/bin/bash,-c参数表示执行指定的命令或脚本。./test.sh是要执行脚本名。 总之,Python提供了许多方法来执行Shell脚本,开发者可以根据需要选择最适合自己的方法。 ### 回答3: Python 可以执行 Shell 脚本,这在某些情况下非常有用。Shell 脚本通常用于自动化任务,例如创建备份文件、批量重命名文件、在特定条件下运行命令等。Python 作为一种强大的编程语言,可以帮助我们轻松地编写 Shell 脚本并在需要时调用它们。 Python执行 Shell 脚本的方法有多种,其中常用的方式是使用 subprocess 模块。这个模块允许我们在 Python 中启动一个新的进程并运行 Shell 命令或脚本。下面是一个简单的示例: ```python import subprocess # 运行一个简单的 Shell 命令 subprocess.run(["ls", "-l"]) # 运行一个 Shell 脚本 subprocess.run(["bash", "my_script.sh"]) ``` 在这个示例中,我们使用了 subprocess.run() 函数来启动进程并执行 Shell 命令或脚本。参数是一个列表,其中第一个元素是 Shell 命令或脚本的名称,后面的元素是传递给命令或脚本的参数。 如果需要捕获 Shell 脚本的输出,可以使用 subprocess.run() 函数的 stdout 参数: ```python import subprocess # 运行一个 Shell 脚本并捕获输出 result = subprocess.run(["bash", "my_script.sh"], stdout=subprocess.PIPE) output = result.stdout.decode('utf-8') print(output) ``` 在这个示例中,我们添加了 stdout=subprocess.PIPE 参数以便捕获脚本的标准输出。我们可以使用 result.stdout 属性来访问输出,并使用 decode() 方法将其转换为字符串。 除了 subprocess 模块之外,Python 还有其他几个模块可以用于执行 Shell 命令和脚本,例如 os.system()、os.popen() 等。这些模块都可以帮助我们轻松地在 Python执行 Shell 脚本。 总的来说,Python 执行 Shell 脚本非常方便,只需几行代码即可完成。无论是运维、数据分析还是其他领域,使用 Python 执行 Shell 脚本都是非常值得考虑的方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值