Python subprocess库常用函数

1. subprocess.run():

应用场景:执行系统命令,获取命令执行结果。

作用:运行命令,等待命令完成,然后返回CompletedProcess实例。

参数

  • args:要执行的命令及其参数,可以是一个字符串或一个参数列表。
  • capture_output:如果为True,则捕获命令的输出。
  • input:提供给子进程的输入数据。
  • text:如果为True,则输出和错误将是文本格式。
  • check:如果为True,并且返回码不为0,则引发CalledProcessError
  • cwd:子进程的当前工作目录。
  • env:子进程的环境变量。
  • timeout:设置子进程的超时时间。
import subprocess  
  
# 执行dir命令,并捕获输出  
result = subprocess.run(['dir'], capture_output=True, text=True)  
print(result.stdout)  
  
# 执行带有输入参数的命令  
result = subprocess.run(['echo', 'Hello, World!'], capture_output=True, text=True)  
print(result.stdout)  
  
# 执行带有超时的命令  
try:  
    result = subprocess.run(['ping', 'localhost', '-n', '5'], timeout=2, capture_output=True, text=True)  
except subprocess.TimeoutExpired:  
    print("Command timed out")

*如果报错 ‘系统找不到指定文件’,参数加上shell=True 

2. subprocess.call()

应用场景:执行系统命令,不关心命令的输出,只关心命令是否成功执行。

作用:运行由参数args指定的命令,并返回返回码。不会获取命令的输出。

import subprocess  
  
# 执行dir命令,不捕获输出  
returncode = subprocess.call(['dir'])  
print(returncode)

3. subprocess.check_call()

应用场景:执行系统命令,并确保命令成功执行。

作用:与subprocess.call()相同,但如果返回码不为0,则引发CalledProcessError

import subprocess  
  
try:  
    # 执行dir命令,不捕获输出,如果失败则引发异常  
    subprocess.check_call(['dir'])  
except subprocess.CalledProcessError as e:  
    print(f"Command failed with return code {e.returncode}")

4. subprocess.check_output()

应用场景:执行系统命令,并获取命令的输出。

作用:运行命令,并返回其输出。如果返回码不为0,则引发CalledProcessError

import subprocess  
  
try:  
    # 执行dir命令,并捕获输出  
    output = subprocess.check_output(['dir'], text=True)  
    print(output)  
except subprocess.CalledProcessError as e:  
    print(f"Command failed with return code {e.returncode}")

5. subprocess.Popen

应用场景:提供最大程度的灵活性来创建和管理子进程,包括设置输入/输出/错误管道、环境变量、工作目录等。

作用:Popen类是subprocess模块中用于创建子进程的底层接口。其他函数如run()、call()等都是基于Popen类的封装。

import subprocess  
  
# 使用Popen执行dir命令,并捕获输出  
process = subprocess.Popen(['dir'], stdout=subprocess.PIPE, text=True)  
output, _ = process.communicate()  
print(output)  
  
# 使用Popen执行带有输入参数的命令  
process = subprocess.Popen(['echo', 'Hello, World!'], stdout=subprocess.PIPE, text=True)  
output, _ = process.communicate(input='Another input\n')  
print(output)

你可能感兴趣的:(python,服务器)