python下subprocess使用

subprocess 是 Python 的一个标准库模块,用于在新的进程中执行子程序,并获取其输出。它允许你启动新的应用程序,连接到它们的输入/输出/错误管道,并获取它们的返回码。

以下是一些常用的 subprocess 模块的功能:

1:执行外部命令

import subprocess  
subprocess.run(["ls", "-l"])  # 列出当前目录的文件

2:使用 Popen 类

import subprocess  
p = subprocess.Popen(["ls", "-l"], stdout=subprocess.PIPE)  
output, error = p.communicate()  
print(output.decode())  # 输出结果
 

3:使用 check_output
这是一个更方便的函数,用于捕获子进程的输出。如果子进程返回一个非零的退出码,它将会引发一个 CalledProcessError。

import subprocess  
try:  
    output = subprocess.check_output(["ls", "-l"])  
    print(output.decode())  # 输出结果  
except subprocess.CalledProcessError as e:  
    print(f"命令返回了非零的退出码: {e}")

4:使用管道:
你可以使用管道来连接多个命令或进程。例如,你可以使用 | 将两个命令连接起来,使第一个命令的输出成为第二个命令的输入。

import subprocess  
subprocess.run(["echo", "hello"], stdout=subprocess.PIPE).stdout.decode().strip() | subprocess.run(["cat"], stdin=subprocess.PIPE)

5:使用 shell 参数:
当你想在 shell 中执行命令时,可以使用 shell=True 参数。但请注意,这可能会带来安全风险,因为它允许注入 shell 代码。因此,除非你完全信任输入,否则最好不要使用这个参数。

import subprocess  
subprocess.run("echo hello", shell=True)  # 在 shell 中执行命令

6: 错误处理
当子进程返回非零的退出码时,你可以捕获 CalledProcessError 来处理错误。

import subprocess  

try:  
    output = subprocess.check_output(["nonexistent_command"])  
except subprocess.CalledProcessError as e:  
    print(f"命令返回非零退出码:{e.returncode}")  
except FileNotFoundError:  
    print("命令不存在或路径不正确")  
except Exception as e:  
    print(f"发生未知异常:{e}")

7: 传递文件对象
你可以传递文件对象给 Popen 的 stdin, stdout, 和 stderr 参数,以便与子进程进行交互。
8:获取进程ID
你可以使用 Popen 的 pid 属性来获取子进程的进程ID。
9:等待进程完成
你可以使用 Popen 的 wait 方法来等待进程完成,并返回退出码。
10:使用其他操作系统参数
你可以使用其他操作系统参数来控制子进程的行为,例如设置环境变量、更改工作目录等。

python下subprocess使用_第1张图片

你可能感兴趣的:(python开发,python,开发语言)