欢迎访问宙启技术站
智能推送

使用run()函数在Python中执行Shell命令的完全指南

发布时间:2023-12-26 21:08:42

在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命令,并获取输出、错误信息和退出代码。