📜  如何在 python 中运行 shell 命令(1)

📅  最后修改于: 2023-12-03 15:24:20.332000             🧑  作者: Mango

在Python中运行Shell命令

在Python中,我们可以使用subprocess模块轻松地运行Shell命令。它提供了一个简单的接口来调用系统命令,并获得其输出。

运行一个简单的命令

首先让我们看看如何在Python中运行一个简单的命令,例如ls /usr/bin。下面是示例代码:

import subprocess

output = subprocess.check_output(['ls', '/usr/bin'])
print(output.decode('utf-8'))

这里我们使用了check_output()函数,它会运行命令并返回输出结果。我们将命令和参数作为列表传递给函数。注意我们也需要使用decode()函数将输出从字节串转换为字符串。

使用Shell语法

有时候我们需要使用Shell语法来运行命令,例如管道或重定向。在这种情况下,我们可以将shell参数设置为True,这将使subprocess使用Shell来解析命令。下面是一个简单的示例:

import subprocess

output = subprocess.check_output('ls /usr/bin | grep zip', shell=True)
print(output.decode('utf-8'))

这里我们运行了一个类似的命令,但使用了管道和grep命令。我们可以将整个命令的字符串传递给check_output()函数,并将shell参数设置为True

请注意,使用Shell语法需要注意安全性问题,因为它可能会使我们的程序容易受到Shell注入攻击。因此,我们应该在运行Shell命令时格外小心。

获取命令退出码

有时候我们需要获取运行命令的退出码。在subprocess中,我们可以使用returncode属性来获取没处理完的子进程的退出代码。下面是一个简单的示例:

import subprocess

result = subprocess.run(['ls', '/usr/bin'], capture_output=True)

if result.returncode == 0:
    print(result.stdout.decode('utf-8'))
else:
    print(result.stderr.decode('utf-8'))

这里我们使用run()函数运行命令,并使用capture_output参数将输出捕获到变量中。然后,我们检查returncode属性来查看命令是否成功。

使用Popen()

有时候我们需要更多的控制来运行命令。在这种情况下,我们可以使用Popen()函数,它允许我们自定义输入、输出和错误句柄,以及其他选项。下面是一个简单的示例:

import subprocess

with subprocess.Popen(['ls', '/usr/bin'], stdout=subprocess.PIPE) as proc:
    output = proc.stdout.read()

print(output.decode('utf-8'))

这里我们使用Popen()函数运行命令,并将标准输出设置为一个PIPE对象。然后,我们读取输出并将其打印出来。请注意,我们使用了一个with块来确保子进程被正确关闭。

结论

在Python中运行Shell命令是很容易的。使用subprocess模块,我们可以轻松地调用系统命令,并获取其输出。我们还学习了如何使用Shell语法、获取命令退出码以及使用Popen()函数进行更多的控制。记住小心安全,并选择最适合你任务的方法。