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

Python中如何利用run()函数来运行子进程

发布时间:2023-12-26 21:08:03

在Python中,可以使用subprocess.run()函数来运行子进程。这个函数会启动一个子进程,执行指定的命令,并等待子进程执行完毕。

subprocess.run()函数的语法如下:

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

参数说明:

- args:需要运行的命令,可以是一个字符串或一个字符串列表。如果是一个字符串,则会被解析为shell命令;如果是一个字符串列表,则会直接调用对应的可执行文件。

- stdin:子进程的标准输入流,可以是一个文件对象。

- input:子进程的标准输入流的内容,默认为None

- stdout:子进程的标准输出流,可以是一个文件对象。

- stderr:子进程的标准错误流,可以是一个文件对象。

- shell:是否使用shell命令,默认为False

- timeout:子进程的超时时间,默认为None,表示不超时。

- check:是否检查子进程返回的状态码,默认为False。设置为True时,在子进程返回非零状态码时会抛出异常。

- universal_newlines:是否将输入、输出流处理为文本模式,默认为False。在文本模式下,输入、输出流使用str类型进行处理。

下面是一个使用subprocess.run()函数的例子,来执行一个简单的shell命令:

import subprocess

subprocess.run(['ls', '-l'])

这个例子中,subprocess.run()函数会启动一个新的子进程来执行ls -l命令,并等待子进程执行完毕。执行结果会直接输出到标准输出流。

subprocess.run()函数会返回一个CompletedProcess对象,其中包含子进程的返回结果。可以通过调用CompletedProcess对象的属性来获取相关信息,例如返回的状态码、标准输出流的内容等。下面是一个例子:

import subprocess

result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE)
print(result.returncode)  # 子进程返回的状态码
print(result.stdout)  # 子进程的标准输出流的内容

在这个例子中,使用stdout=subprocess.PIPE将子进程的标准输出流重定向到一个管道。然后通过result.stdout属性获取子进程的标准输出流的内容。

除了执行简单的命令之外,subprocess.run()函数还支持一些高级用法,例如执行一个带参数的命令、使用管道进行进程间通信等。下面是一些例子:

1. 执行一个带参数的命令:

import subprocess

subprocess.run(['echo', 'Hello, World!'])

2. 通过管道进行进程间通信:

import subprocess

process1 = subprocess.Popen(['echo', 'Hello'], stdout=subprocess.PIPE)
process2 = subprocess.Popen(['grep', 'Hello'], stdin=process1.stdout, stdout=subprocess.PIPE)

output = process2.communicate()[0]
print(output)

这个例子中,首先启动一个子进程process1来执行echo Hello命令,并将标准输出流重定向到一个管道。然后启动另一个子进程process2来执行grep Hello命令,并将标准输入流重定向到process1的标准输出流。最后调用process2.communicate()方法来获取process2的标准输出流的内容。

通过subprocess.run()函数,我们可以在Python中方便地执行子进程,并获取子进程的输出结果。它提供了很多选项来满足不同的需求,使得在Python中执行子进程变得更加灵活和方便。