Python subprocess模块学习总结
什么是subprocess模块?
subprocess是Python用来执行外部命令或程序的标准库。它允许我们在Python程序中启动新的进程,并与它们交互,获取它们的输出并监控它们的状态。
如何使用subprocess模块?
下面是一个简单的subprocess程序,它执行“ls -l”命令并将其输出打印到控制台:
import subprocess
subprocess.call(["ls", "-l"])
在这个例子中,我们使用了subprocess.call()
函数来执行命令,并传递了一个命令列表——["ls", "-l"]
——作为参数。这个列表中的第一项是要执行的命令的名称,剩下的是命令的参数。
当call()
函数执行时,它会启动一个名为“ls”的新进程,并将其指定为用户输入的命令。该进程会执行-l
参数指定的操作,并将其输出发送到控制台。
import subprocess
output = subprocess.check_output("ls -l", shell=True)
print(output.decode("utf-8"))
在这个例子中,我们使用了check_output()
函数来执行命令,并传递一个字符串作为参数。由于我们使用了shell=True
,所以我们可以在字符串中使用任何合法的shell命令(可以加引号或者不加,如"ls -l"
或'ls -l'
)。
与call()
函数不同,check_output()
函数不会直接将命令的输出发送到控制台。相反,它会返回由命令生成的所有标准输出。
因此,在这个例子中,我们首先声明一个名为output
的变量,它等于执行ls -l
命令时产生的输出。然后,我们使用print()
函数将其解码为UTF-8格式并打印到控制台。
子进程的管道
除了上述两种简单的使用方法外,subprocess模块还提供了一种广泛使用的管道机制,可以方便地在Python程序中连接多个进程。
下面是一个使用管道的例子——我们通过管道将“ls -l”进程的输出传递给“grep .py”的进程,然后打印过滤后的输出:
import subprocess
p1 = subprocess.Popen(["ls", "-l"], stdout=subprocess.PIPE)
p2 = subprocess.Popen(["grep", ".py"], stdin=p1.stdout, stdout=subprocess.PIPE)
p1.stdout.close()
output = p2.communicate()[0]
print(output.decode("utf-8"))
在这个例子中,我们首先使用Popen()
函数启动了一个名为“ls”的进程,并将其输出连接到一个管道中(stdout=subprocess.PIPE
)。然后,我们通过Popen()
函数启动了另一个名为“grep”的进程,并将其输入连接到本地的管道中(stdin=p1.stdout
)。
接着,我们关闭第一个进程的输出流(p1.stdout.close()
),以便第二个进程能够继续读取数据。最后,我们使用communicate()
函数读取第二个进程的标准输出,将其解码为UTF-8格式,并打印到控制台。
结论
subprocess模块提供了一种灵活的方式来在Python程序中执行外部命令,并通过管道将多个进程连接起来。本文介绍了该模块的基础知识,包括如何启动进程、执行命令和连接管道。希望这篇文章能够帮助你更好地了解并使用subprocess模块。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python subprocess模块学习总结 - Python技术站