subprocess.Popen
是一个用于创建新进程的函数,通过调用系统的命令或其他可执行文件来执行指定的操作。
subprocess.Popen
的常用参数如下:
args
:一个字符串或者一个包含字符串的列表,用于指定要执行的命令或可执行文件及其参数。bufsize
:一个可选的整数参数,用于设置缓冲区的大小,默认值为0(无缓冲)。stdin
、stdout
、stderr
:分别用于指定标准输入、标准输出和标准错误的流。它们可以是文件对象,也可以是一个整数,表示对应的文件描述符。默认值为None,表示继承父进程的对应流。shell
:一个可选的布尔值参数,用于指定是否通过shell来执行命令。默认值为False。universal_newlines
:一个可选的布尔值参数,用于指定是否将输入和输出文本模式转换为通用的换行符(\n
)。默认值为False。subprocess.Popen
返回一个Popen
对象,可以通过该对象的方法和属性来与新进程进行交互。常用的方法和属性如下:
communicate(input=None)
:与子进程进行交互,向其发送数据(如果有)并等待其完成。该方法返回一个包含标准输出和标准错误输出的元组。wait()
:等待子进程结束,并返回其退出状态。poll()
:检查子进程是否已经结束,如果已经结束返回退出状态,否则返回None。terminate()
:终止子进程。kill()
:杀死子进程。returncode
:子进程的退出状态。下面是一个使用subprocess.Popen
的简单示例:
import subprocess
# 执行一个命令并获取输出
result = subprocess.Popen(["ls", "-l"], stdout=subprocess.PIPE)
output = result.communicate()[0].decode("utf-8")
print(output)
# 执行一个命令并等待其完成
subprocess.Popen(["ls", "-l"]).wait()
print("Done")
上述示例中,首先使用subprocess.Popen
执行了一个ls -l
命令,并通过stdout=subprocess.PIPE
参数将标准输出重定向到一个管道,然后通过communicate()
方法获取了命令的输出,并将其转换为字符串并打印出来。接着使用subprocess.Popen
执行了另一个ls -l
命令,然后使用wait()
方法等待命令完成,并在命令完成后打印出"Done"。