使用run()函数在Python中执行Shell命令的完全指南
在Python中使用run()函数可以执行Shell命令。run()函数是subprocess模块中的一个函数,用于执行指定的命令,并等待命令完成。下面是一个完整的指南,以及一些使用run()函数的例子。
1. 导入subprocess模块:
import subprocess
2. 执行简单的Shell命令:
result = subprocess.run(["ls", "-l"])
上面的例子执行了ls -l命令,并将结果存储在result变量中。run()函数接受一个列表作为参数,列表包含要执行的命令及其参数。
3. 获取命令的输出:
run()函数返回一个CompletedProcess对象,可以通过stdout属性获取命令的标准输出:
result = subprocess.run(["ls", "-l"], capture_output=True) output = result.stdout.decode() print(output)
以上例子中,使用capture_output=True参数将命令的输出捕获到stdout属性中,然后使用decode()方法将字节流转换为字符串。
4. 捕获命令的错误信息:
类似地,可以使用stderr属性获取命令的错误输出:
result = subprocess.run(["ls", "-l", "nonexistent"], capture_output=True) error = result.stderr.decode() print(error)
在上面的例子中,我们传递了一个不存在的文件名给ls -l命令,导致了一个错误。stderr属性捕获了错误输出,并使用decode()方法将字节流转换为字符串。
5. 获取命令的退出代码:
CompletedProcess对象还包含了命令的退出代码,可以通过returncode属性获取:
result = subprocess.run(["ls", "-l"]) exit_code = result.returncode print(exit_code)
6. 通过字符串执行命令:
如果命令是一个字符串,可以设置shell=True参数来执行该命令:
result = subprocess.run("ls -l", shell=True)
注意,使用shell=True参数可以执行一些高级的Shell语法,但同时也存在安全风险,应慎用。
7. 传递输入给命令:
run()函数还可以传递一个input参数,将输入传递给要执行的命令:
result = subprocess.run(["grep", "apple"], input="apple banana orange ", capture_output=True, text=True) output = result.stdout print(output)
上面的例子中,我们将字符串apple
banana
orange
传递给了grep命令,并使用text=True参数将输出以文本形式返回。
8. 设定超时时间:
可以使用timeout参数设定命令的超时时间,如果命令执行时间超过设定的超时时间,将抛出TimeoutExpired异常:
try:
result = subprocess.run(["sleep", "10"], timeout=5)
except subprocess.TimeoutExpired:
print("Command timed out.")
在上面的例子中,我们将sleep 10命令设定了5秒的超时时间,由于命令执行时间超过了5秒,所以触发了TimeoutExpired异常。
希望这个指南能帮助你理解如何使用run()函数在Python中执行Shell命令。使用该函数可以方便地执行各种Shell命令,并获取输出、错误信息和退出代码。
