欢迎访问宙启技术站
智能推送

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()函数执行并监控子进程是一种简单而有效的方式。它允许我们执行命令行程序,传递参数,监控子进程的运行时间,并捕获子进程的输出和错误输出。这为我们处理子进程提供了更灵活和强大的功能。