您的位置:

利用subprocess模块执行命令

介绍

subprocess是Python中一个重要的标准库,提供了用于创建新进程、连接到其管道、读取其输出等功能的支持。它允许在Python中轻松地执行外部命令。

正文

一、subprocess模块的基础使用

subprocess模块允许我们在Python程序中执行外部命令。最简单的方法是使用subprocess.call()函数。它的基本语法如下:


import subprocess
subprocess.call("command")

其中,"command"是需要执行的命令。尝试运行一些基本的命令:

subprocess.call("ls")
subprocess.call("dir")

二、Popen函数的运用

尽管subprocess.call()函数可以满足大多数需要执行命令的场景,但是在某些情况下,我们需要更多的控制权。使用Popen函数,可以启动一个新的进程,并从其标准输出中读取数据。下面是Popen函数的基本使用示例:

import subprocess
process = subprocess.Popen("command", stdout=subprocess.PIPE, shell=True)
(output, err) = process.communicate()
print(output)

其中,process变量存储了Popen对象, stdout参数指定将命令的标准输出通过管道重定向回Python程序。通常使用的PIPE也是常见的,且是最常见的输出重定向方式。之后,communicate()函数会读取子进程的输出,并返回一个二元组,其中包括标准输出和标准错误输出。最后,在Python程序中输出标准输出。

三、通过subprocess模块执行系统命令的进阶用法

除了基本使用和使用Popen函数之外,还有其他一些进阶使用方法,在需要同时执行多个命令且需要捕获它们的输出时特别有用。下面的代码样例演示了如何在Windows中将两个命令连接起来:

import subprocess
cmds = ["echo 'Hello World'", "exit 1"]
output = ""
for cmd in cmds:
    process = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
    (temp_output, err) = process.communicate()
    output += temp_output.decode()
    print(temp_output.decode())
print(output)

该代码将多个命令组合在一起,并且Python程序也可以读取每个命令的输出并在程序中显示结果。

小结

执行外部命令是许多编程项目中必不可少的一部分,而Python的subprocess模块为执行这些命令提供了许多功能。通过本文,您了解了如何使用subprocess来调用命令行应用程序,以及它的一些高级用法。 请记住,在使用subprocess执行命令时,请始终在不信任的输入上使用适当的参数。在Python中,保持应用程序的安全永远是第一要务。