python执行shell命令
在 Python 编程中,有时我们需要执行一些 shell 命令来完成特定的任务,比如文件操作、系统调用等。Python 提供了多种内建的方法来执行这些命令,每种方法都有其适用场景和特点。
1. os.system()
os.system()
是执行 shell 命令的最简单方法。它接受一个字符串作为命令,并在 shell 中执行。返回值是命令的退出状态码,通常 0 表示成功,非 0 表示失败。
import os
result = os.system('ls -l')
print("Exit status:", result)
特点:
- 简单易用。
- 无法获取命令的输出或错误信息。
- 无法处理命令的超时。
2. subprocess.run()
subprocess.run()
是推荐的方式,因为它提供了更多的灵活性和功能。它可以执行命令,并且可以捕获输出和错误信息。
import subprocess
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print("Output:", result.stdout)
特点:
- 可以捕获输出和错误。
- 可以设置超时。
- 可以检查命令的退出状态。
3. subprocess.Popen()
subprocess.Popen()
提供了更细粒度的控制,允许执行命令并与之交互。它返回一个Popen
对象,可以用于进一步操作。
import subprocess
process = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
stdout, stderr = process.communicate()
print("Output:", stdout)
if process.returncode != 0:
print("Error:", stderr)
特点:
- 可以实时获取输出和错误。
- 可以控制进程的输入、输出和错误流。
- 可以等待或轮询进程的完成。
4. os.popen()
os.popen()
用于执行命令并读取输出。它返回一个文件对象,可以像普通文件一样读取。
with os.popen('ls -l') as stream:
print(stream.read())
特点:
- 简单易用,适用于只读取输出的场景。
- 不能捕获错误信息。
5. subprocess.check_output()
subprocess.check_output()
用于执行命令并获取输出。如果命令返回非零退出状态码,会抛出异常。
from subprocess import check_output
output = check_output(['ls', '-l'], text=True)
print("Output:", output)
特点:
- 直接获取命令输出。
- 如果命令失败,会抛出异常,便于错误处理。
6. subprocess.call()
subprocess.call()
执行一个命令并等待其完成,返回命令的退出状态码。
import subprocess
status = subprocess.call(['ls', '-l'])
print("Exit status:", status)
特点:
- 简单易用,只返回退出状态码。
- 不能捕获输出或错误信息。
使用建议
在选择执行 shell 命令的方法时,应根据具体需求来决定使用哪种方法。如果需要捕获输出和错误信息,推荐使用subprocess.run()
或subprocess.Popen()
。如果只是简单地执行命令并获取退出状态,os.system()
或subprocess.call()
可能更合适。
此外,使用这些方法时,还需要注意异常和错误的处理,特别是当命令失败时。subprocess
模块因其强大的控制和灵活性,已成为执行 shell 命令的首选方式。
- 点赞
- 收藏
- 关注作者
评论(0)