Python中通过run()函数执行并监控子进程
发布时间:2024-01-16 16:36:13
在Python中,可以使用subprocess模块中的run()函数来执行和监控子进程。run()函数是一个高层次的接口,它更简单并且更易于使用,对于只需要执行子进程并等待其完成的情况非常有用。以下是使用run()函数执行并监控子进程的示例。
import subprocess
# 执行一个简单的shell命令
result = subprocess.run(['echo', 'Hello, World!'], capture_output=True, text=True)
print(result.returncode) # 打印子进程的返回码
print(result.stdout) # 打印子进程的标准输出
# 执行一个命令行程序,并传递参数
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.returncode) # 打印子进程的返回码
print(result.stdout) # 打印子进程的标准输出
# 监控子进程的运行时间
result = subprocess.run(['sleep', '5'], timeout=3)
print(result.returncode) # 打印子进程的返回码
# 捕获子进程的异常情况
try:
result = subprocess.run(['ls', 'nonexistent_file.txt'], check=True)
print(result.returncode)
except subprocess.CalledProcessError as e:
print(e.returncode) # 打印子进程的非零返回码
print(e.output) # 打印子进程的错误输出
# 捕获子进程的输出和错误输出
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.returncode) # 打印子进程的返回码
print(result.stdout) # 打印子进程的标准输出
print(result.stderr) # 打印子进程的错误输出
在上面的示例中,我们首先使用run()函数执行了一个简单的shell命令echo 'Hello, World!',并使用capture_output=True来捕获子进程的输出。然后,我们打印出子进程的返回码和标准输出。
接下来,我们使用run()函数执行了一个命令行程序ls -l,同样使用capture_output=True来捕获子进程的输出,并打印出子进程的返回码、标准输出和错误输出。
然后,我们使用timeout参数来设置子进程的运行时间上限,如果子进程超时,则会抛出一个TimeoutExpired异常。
接着,我们使用check=True来检查子进程的返回码,如果子进程的返回码为非零,则会抛出一个CalledProcessError异常。我们通过捕获这个异常,打印出子进程的非零返回码和错误输出。
最后,我们使用capture_output=True来捕获子进程的输出和错误输出,并打印出来。
总结来说,使用run()函数执行并监控子进程是一种简单而有效的方式。它允许我们执行命令行程序,传递参数,监控子进程的运行时间,并捕获子进程的输出和错误输出。这为我们处理子进程提供了更灵活和强大的功能。
