Python3运行shell命令
在Python中,我们可以使用subprocess
模块来运行shell命令。subprocess
模块提供了一种简单而强大的方法来与操作系统的shell进行交互,并在Python程序中执行命令。
1. subprocess模块简介
Python的subprocess
模块允许我们在Python程序中创建新的进程,连接其输入/输出/错误管道,并获取执行结果。它提供了多种方法来运行shell命令,例如subprocess.call()
,subprocess.check_output()
等。
2. 使用subprocess运行shell命令
2.1 subprocess.call()
subprocess.call()
方法用于运行shell命令,并等待命令完成后返回状态码。下面是一个简单的示例,演示如何使用subprocess.call()
运行ls
命令:
import subprocess
subprocess.call(["ls", "-l"])
在上面的示例中,["ls", "-l"]
是一个命令及其参数的列表。subprocess.call()
方法会将该命令传递给操作系统的shell执行,并等待其完成。执行完毕后,subprocess.call()
会返回进程的退出状态码。
2.2 subprocess.check_output()
subprocess.check_output()
方法用于运行shell命令,并返回命令的输出结果。下面是一个示例,演示如何使用subprocess.check_output()
运行ls
命令并获取输出:
import subprocess
output = subprocess.check_output(["ls", "-l"])
print(output.decode("utf-8"))
在上面的示例中,output
变量保存了ls -l
命令的输出结果。由于check_output()
方法返回的是字节流(bytes),我们需要使用decode()
方法将其转换为字符串。
3. 运行带有参数的shell命令
有时候,我们需要运行带有参数的shell命令。下面是一个示例,演示如何使用subprocess.call()
运行带有参数的命令:
import subprocess
subprocess.call("echo Hello, World!", shell=True)
在上面的示例中,shell=True
表示我们希望将命令传递给shell来执行。这样,我们就可以像在shell中一样使用命令和参数。
4. 捕获命令的输出和错误信息
除了获取命令的输出结果,subprocess
模块还可以捕获命令的错误输出。下面是一个示例,演示如何使用subprocess.check_output()
获取命令的输出和错误信息:
import subprocess
try:
output = subprocess.check_output(["ls", "-l"], stderr=subprocess.STDOUT)
print(output.decode("utf-8"))
except subprocess.CalledProcessError as e:
print("命令执行失败:", e.output.decode("utf-8"))
在上面的示例中,我们使用try-except
语句来捕获subprocess.check_output()
可能抛出的CalledProcessError
异常。e.output
保存了命令的错误输出。
5. 非阻塞方式运行shell命令
有时候,我们希望以非阻塞的方式运行shell命令,即不等待命令完成就继续执行后续代码。subprocess
模块提供了subprocess.Popen()
方法来实现这个功能。下面是一个示例,演示如何以非阻塞方式运行shell命令:
import subprocess
p = subprocess.Popen(["ls", "-l"])
在上面的示例中,subprocess.Popen()
方法会立即返回一个Popen
对象,该对象可以用于后续操作,例如等待命令完成、获取命令的输出等。
6. 总结
这篇文章介绍了如何在Python3中使用subprocess
模块运行shell命令。我们学习了subprocess.call()
和subprocess.check_output()
方法的用法,并了解了如何处理命令的输出和错误信息。此外,我们还学习了如何以非阻塞方式运行shell命令。
subprocess
模块是Python中运行shell命令的强大工具