python
主页 > 脚本 > python >

python学习之subprocess模块介绍

2024-12-08 | 佚名 | 点击:

subprocess功能:创建子进程,并连接他的输入、输出和错误管道,获取其返回状态(可以在python代码中执行操作系统级别的命令)

1. subprocess.run()

功能:执行args参数所表示的命令,等待命令结束,并返回一个CompletedProcess类型对象

1.1. 参数介绍

subprocess.run(args,*,stdin=None,input=None,stdout=None,stderr=None,shell=False,timeout=None,check=False,encoding=None,errors=None)

1.1.1 subprocess.CompletedProcess

run()的返回值,表示一个进程结束了。CompletedProcess类有下面这些属性

1.1.2 subprocess.DEVNULL

特殊值,用于传递给stdout, stdin和stderr参数

1.1.3 subprocess.PIPE

管道,可传递给stdout, stdin, stderr参数

1.1.4 subprocess.STDOUT

特殊值,可传递给stderr参数,表示stdout和stderr合并输出,可以使用read(), readline(), readlines()等方法

1.1.5 args与shell

1.2. 获取执行结果

run()方法返回的是一个completedProcess类型对象,而非执行结果。如果要获取命令执行的结果或信息,在调用run()方法的时候,需要指定stdout=sunprocess.PIPE,结果将会以bytes类型保存在stdout属性中

1.2.1. 交互式输入

run()方法的stdin参数可以接收一个文件句柄,如下

1

2

3

4

import subprocess

file=open("d:\\1.txt")

ret=subprocess.run('python',stdin=file,stdout=subprocess.PIPE,shell=True)

print(ret.stdout)

2. subprocess.Popen()

其用法和参数与run()基本类同,可创建和管理子进程,但是它的返回值是一个Popen对象,而不是CompletedProcess对象

2.1 参数介绍

1

class subprocess.Popen(args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0,restore_signals=True, start_new_session=False, pass_fds=(), *, encoding=None, errors=None)

2.1.1 subprocess.Popen可调用的方法

2.2 实例

Popen对象的stdin, stdout, stderr是三个文件句柄,可以像文件那样读写,通过subprocess.stdin.write()可以输入数据,subprocess.Popen().stdout.read()可以输出数据

1

2

3

4

5

import subprocess

s=subprocess.Popen('python3',stdout=subprocess.PIPE,stdin=subprocess.PIPE,shell=True)

s.stdin.write(b'import os\n')

s.stdin.write(b'print(os.environ)')

s.stdin.close()

3. subprocess常用函数

函数 使用说明
subprocess.run() 执行args参数所表示的命令,执行完成后返回CompletedProcess
subprocess.call() 执行指定的命令,返回命令执行状态,类似os.system(cmd)
subprocess.check_call() 等价于subprocess.run(…,check=True)
subprocess.check_output() 执行指定命令,状态码为0则返回命令执行结果,否则抛出异常
subprocess.getoutput() 接收字符串格式的命令,执行并返回结果,类似于os.popen(cmd).read()和commands.getoutput(cmd)
subprocess.getstatusoutput() 执行cmd命令,返回元组(命令执行状态,命令执行结果输出)

附:python subprocess.run() 执行py脚本并等待该脚本执行完成

要使用 subprocess.run() 执行 Python 脚本并等待脚本执行完成,可以按照以下方式进行:

1

2

3

4

5

6

7

8

9

import subprocess

 

# 脚本的文件路径

script_path = "/path/to/your/script.py"

 

# 使用 subprocess.run() 执行脚本

subprocess.run(["python", script_path], capture_output=True, text=True)

 

# 程序会在这里等待脚本执行完成

在上述代码中:

subprocess.run() 会阻塞当前进程,直到被调用的命令执行完成。执行完成后,程序才会继续执行后续的代码。如果你不想捕获输出,可以去掉 capture_output 参数。

原文链接:
相关文章
最新更新