Python 执行 cmd 命令获取返回值

Python 执行 cmd 命令获取返回值

Python 执行 cmd 命令获取返回值

引言

在开发中,我们经常会遇到需要执行一些命令行指令并获取返回值的情况。对于在 Windows 系统上使用 Python 的开发者来说,执行 cmd 命令是一种常见的操作。本文将介绍如何使用 Python 执行 cmd 命令并获取返回值的方法。

1. 使用 subprocess 模块执行 cmd 命令

Python 提供了 subprocess 模块,该模块可以用于创建新的进程,执行外部命令,并与其进行通信。我们可以利用该模块执行 cmd 命令,并获取其返回值。

下面是一个示例代码,演示了如何使用 subprocess 模块执行 cmd 命令并获取返回值:

import subprocess

# 执行 cmd 命令
result = subprocess.check_output("dir", shell=True)

# 输出返回值
print(result.decode('utf-8'))
Python

上述代码中,我们使用 subprocess.check_output() 方法执行了 dir 命令,将其返回值保存在 result 变量中。然后,我们使用 decode() 方法将返回的字节流解码为字符串,并将其打印输出。

输出结果如下所示:

 驱动器 D 中的卷是 DATA
 卷的序列号是 000F-9D21

 D:\Work

2021/09/20  09:18    <DIR>          .
2021/09/20  09:18    <DIR>          ..
2021/09/20  08:45    <DIR>          dir_example
2021/09/20  09:18                 0 test.txt
               1 个文件              0 字节
               3 个目录 116,380,649,472 可用字节

可以看到,我们成功执行了 dir 命令,并获取了其返回值。

2. 使用 os 模块执行 cmd 命令

除了使用 subprocess 模块外,我们还可以使用内置的 os 模块来执行 cmd 命令,并获取其返回值。

下面是一个示例代码,演示了如何使用 os.system() 方法执行 cmd 命令并获取返回值:

import os

# 执行 cmd 命令
result = os.popen("dir").read()

# 输出返回值
print(result)
Python

上述代码中,我们使用 os.popen().read() 方法执行了 dir 命令,并将其返回值保存在 result 变量中。然后,我们直接打印输出了该返回值。

输出结果与前面使用 subprocess 模块的示例代码相同。

需要注意的是,os.popen() 方法返回的是一个文件对象,我们可以通过调用其 read() 方法来获取返回值。

3. 使用 popen 方法执行命令并获取返回值

除了使用 os 模块的 popen() 方法,我们还可以使用 subprocess 模块的 Popen 类来执行命令,并获取其返回值。

下面是一个示例代码,演示了如何使用 subprocess.Popen 类执行 cmd 命令并获取返回值:

import subprocess

# 执行 cmd 命令
process = subprocess.Popen("dir", stdout=subprocess.PIPE, shell=True)
result = process.communicate()[0].decode('utf-8')

# 输出返回值
print(result)
Python

上述代码中,我们使用 subprocess.Popen() 方法执行了 dir 命令,并将其返回值保存在 result 变量中。我们通过 stdout 参数将输出重定向到管道中,然后使用 communicate() 方法获取输出结果。最后,我们将返回的字节流解码为字符串并打印输出。

输出结果与前面的示例代码相同。

需要注意的是,使用 subprocess.Popen() 方法执行命令时,需要指定 stdout=subprocess.PIPE 参数,将输出重定向到管道中。然后,我们可以通过调用 communicate() 方法来获取管道中的输出。

4. 执行命令时传递参数

在使用 Python 执行 cmd 命令时,我们可以传递参数给命令,并获取其返回值。下面是一个示例代码,演示了如何执行带有参数的 cmd 命令:

import subprocess

# 执行带有参数的 cmd 命令
result = subprocess.check_output("ping -n 3 www.google.com", shell=True)

# 输出返回值
print(result.decode('utf-8'))
Python

上述代码中,我们使用 subprocess.check_output() 方法执行了带有参数的 ping 命令,其中 -n 3 表示发送 3 个 ICMP Echo 请求报文。然后,我们将返回的字节流解码为字符串并打印输出。

输出结果如下所示:

正在 Ping www.google.com [172.217.25.196] 具有 32 字节的数据:
178.255.83.1 通了但不响应: 字节=32 时间=20ms TTL=113
178.255.83.1 通了但不响应: 字节=32 时间=51ms TTL=113
178.255.83.1 通了但不响应: 字节=32 时间=69ms TTL=113

172.217.25.196  Ping 统计信息:
    数据包: 已发送 = 3,已接收 = 0,丢失 = 3 (100% 丢失)
Bash

可以看到,我们成功执行了带有参数的 ping 命令,并获取了其返回值。

5. 错误处理

在执行命令时,有时可能会出现错误。为了确保程序的健壮性,我们应该进行错误处理。

下面是一个示例代码,演示了如何处理执行命令时可能抛出的异常:

import subprocess

try:
    # 执行 cmd 命令
    result = subprocess.check_output("unknown_command", shell=True)
    print(result.decode('utf-8'))
except subprocess.CalledProcessError as e:
    print("执行命令时出现错误:" + str(e))
Python

上述代码中,我们在 try 块中执行了一个未知命令 unknown_command,由于该命令不存在,会抛出 CalledProcessError 异常。在 except 块中,我们捕获了该异常,并输出错误信息。

输出结果如下所示:

执行命令时出现错误:Command 'unknown_command' returned non-zero exit status 1.

可以看到,我们成功捕获到了执行命令时的错误,并输出了详细的错误信息。

结论

本文介绍了如何使用 Python 执行 cmd 命令并获取返回值的方法。我们可以使用 subprocess 模块的 check_output() 方法、os 模块的 popen() 方法,或者 subprocess.Popen 类来执行 cmd 命令。同时,我们还可以传递参数给命令,并获取其返回值。在执行命

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册