python 如何获取os.system执行后的结果

python 如何获取os.system执行后的结果

python 如何获取os.system执行后的结果

在Python中,可以使用os.system()函数来执行系统命令。但是,os.system()函数只会执行命令,不会返回命令的输出。如果我们想要获取命令执行后的结果,我们可以使用一些其他的方法来实现。

使用subprocess模块

subprocess模块是Python的标准库之一,提供了更强大和灵活的方法来执行外部命令,并获取命令执行后的输出。

下面是一个使用subprocess模块获取命令执行结果的示例代码:

import subprocess

# 执行命令
result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE)

# 获取命令执行后的输出
output = result.stdout.decode('utf-8')

print(output)

在上面的示例中,subprocess.run()函数接收一个命令列表作为参数,并设置stdout=subprocess.PIPE来将命令执行后的输出捕获到result.stdout中。然后通过decode()函数将二进制输出转换为字符串,并打印输出。

运行上面的代码,可以获取到执行ls -l命令后的结果,输出类似于下面的内容:

total 496
-rw-r--r--@  1 user  staff  263 Aug 4 10:53 README.md
-rw-r--r--@  1 user  staff  1795 Aug 4 11:15 main.py

使用subprocess模块获取命令执行结果和状态码

除了获取命令执行结果,我们还可以获取命令执行的状态码。状态码是一个整数,表示命令执行的结果。

下面是一个使用subprocess模块获取命令执行结果和状态码的示例代码:

import subprocess

# 执行命令
result = subprocess.run(['ls', '-l', 'non_exist_file'], stdout=subprocess.PIPE)

# 获取命令执行后的输出
output = result.stdout.decode('utf-8')

# 获取命令执行的状态码
status_code = result.returncode

print('Output:')
print(output)
print('Status Code:', status_code)

在上面的示例中,我们故意传递一个不存在的文件名给ls命令,以触发一个错误。执行上面的代码,输出如下:

ls: non_exist_file: No such file or directory
Output:

Status Code: 1

可以看到,当命令执行出错时,result.returncode会返回非零状态码,从而表示命令执行失败。

使用Popen对象逐行获取命令输出

有时候,我们可能需要逐行获取命令执行后的输出,而不是一次性获取所有输出。这时候,可以使用subprocess.Popen对象来实现。

下面是一个使用subprocess.Popen逐行获取命令输出的示例代码:

import subprocess

# 执行命令
process = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE)

# 逐行获取命令输出
for line in process.stdout:
    print(line.decode('utf-8').strip())

process.communicate()

在上面的示例中,我们使用Popen()函数创建一个子进程来执行ls -l命令,并通过迭代process.stdout来逐行获取命令输出。最后,调用process.communicate()来等待子进程执行完毕。

小结

通过subprocess模块,我们可以方便地执行系统命令,并获取命令执行后的结果。同时,subprocess模块还提供了丰富的方法来处理命令执行的输出和错误信息,让我们能够更灵活地使用外部命令。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程