Python3执行系统命令的几种方式

1. 使用os模块执行系统命令

Python提供了os模块,可以用于执行系统命令。通过调用os模块的system()函数,可以执行系统命令并返回执行结果。

import os

# 执行系统命令,并返回命令输出结果

result = os.system('ls -l')

print(result)

在上述示例中,使用os.system()函数执行了ls -l命令,并将返回结果保存到result变量中。输出结果为命令的执行状态码。

2. 使用subprocess模块执行系统命令

subprocess模块是Python中用于执行系统命令的标准库之一。与os模块相比,subprocess模块提供了更多的灵活性和功能。

2.1 执行简单命令

使用subprocess模块执行简单的系统命令,可以使用subprocess.run()函数。

import subprocess

# 执行系统命令,并获取命令输出结果

result = subprocess.run('ls -l', shell=True, capture_output=True, text=True)

print(result.stdout)

在上述示例中,使用subprocess.run()函数执行了ls -l命令,并将命令的输出结果保存在result.stdout变量中。

2.2 执行复杂命令

如果需要执行复杂的系统命令,可以使用subprocess.Popen()函数。该函数提供了更多的选项,可以实现对命令的更细粒度控制。

import subprocess

# 执行系统命令,并获取命令输出结果

process = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE)

output, error = process.communicate()

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

在上述示例中,使用subprocess.Popen()函数执行了ls -l命令,并将命令的输出结果保存在output变量中。

3. 使用sh模块执行系统命令

sh模块是Python的一个第三方库,提供了更简洁的方式来执行系统命令。通过导入sh模块,可以直接使用命令行的语法来执行系统命令。

import sh

# 执行系统命令,并获取命令输出结果

result = sh.ls('-l')

print(result)

在上述示例中,使用sh.ls()函数执行了ls -l命令,并将命令的输出结果保存在result变量中。

4. 使用os.system()和subprocess模块的区别

os.system()和subprocess模块都可以用于执行系统命令,但是它们之间有一些区别。

首先,os.system()执行系统命令时,会阻塞当前进程,直到命令执行完成。而subprocess模块的函数在执行命令时,可以选择在后台执行,不阻塞当前进程,并且可以获取命令的输出结果。

其次,subprocess模块提供了更多的选项和灵活性,可以通过设置参数来控制命令的执行方式。而os.system()函数相对简单,只能执行命令,无法进行更细粒度的控制。

总的来说,如果只需要执行简单的系统命令,并且不需要获取命令的输出结果,可以使用os.system()函数。如果需要执行复杂的命令,或者需要获取命令的输出结果,建议使用subprocess模块。

后端开发标签