在 Python 中执行 Shell 命令并获取输出

在本文中,我们将学习如何借助 os.system() 从 Python 脚本执行 cmd 命令。 我们还将学习如何借助 Python 中的 subprocess 模块以更简单的方式从脚本执行 cmd 命令。


从 Python 脚本执行 CMD 命令并使用 os.system() 获取输出

我们出于不同目的在命令提示符或任何其他终端中执行终端命令。 但是,有时,需要在脚本内运行特定命令。

我们将了解如何直接在 Python 脚本中执行它们。 当我们进行服务器配置时,它非常方便。

首先,让我们向您展示一些在终端中工作的命令,例如 dir、cd 或 md。

命令提示符中的终端命令

现在,我们将了解如何在 Python 脚本中包含相同的内容。 为此,我们将导入一个名为 os.

os 模块将帮助我们与操作系统进行交互。 os 模块对文件和文件夹管理等操作系统任务提供广泛的支持。

让我们进入代码。 system() 是一个在类似 shell 中执行命令的方法,因此如果我们给它任何命令,它就会继续执行它们,就像我们在终端中执行它们一样。

系统函数还可以执行一堆命令。 它执行您可以在终端中运行的每个命令。

我们将使用 try 块,在该块内,我们将使用 system() 方法,这将帮助我们使用终端与操作系统进行交互。 如果 try 块没有执行指定的命令,我们将进入 except 块。

system() 方法内部,我们必须传递命令,但命令类型是 cmd。 为此,我们使用 /k,并在单引号或双引号内输入我们的命令。

import os

try:
    os.system('cmd /k "date"')
except:
    print('Could not execute command')

让我们运行一下,看看这是否给出了准确的输出。

The current date is: 24/08/2022
Enter the new date: (dd-mm-yy)

我们可以看到输出与命令提示符给出的相同。

您可以执行很多命令。 您可以打开记事本或计算器,也可以查看系统信息等等。

如果你想获取命令返回的内容,可以使用 os 模块的 popen() 函数获取。 在这个函数内部,我们可以传递命令并使用 readlines() 方法来获取其内容。

我们可以使用很多方法来获取干净的数据。 这取决于你。

import os
DATA=os.popen('help').readlines()[5].strip('\n')
print(DATA)

获取命令返回的内容

我们可以在任何地方使用这些命令,例如类、循环和函数。 这将正常工作,无需将其包装在函数中。

import os
def CMD_Com():
    DATA=os.popen('help').readlines()[5].strip('\n')
    print(DATA)
CMD_Com()

输出:

CACLS          Displays or modifies access control lists (ACLs) of files.

从 Python 脚本执行 CMD 命令并使用 Subprocess 模块获取输出

与子流程交互是一项基本技能。 不建议使用 os 模块在 Python 脚本内执行终端命令。

使用 os.system() 执行终端命令是在 Python 中运行命令的一种非常简单的方法。

os.system() 的功能有限; 正确的方法是使用一个名为 subprocess 的模块,这使得执行终端命令不太具有挑战性。 使用 subprocess 模块,我们可以运行当前正在处理的所有操作系统命令。

这就是我们在操作系统中运行所有现有命令的方式,例如打开记事本或检查当前工作目录,或我们可以使用 subprocess 模块执行的任何其他操作。

import subprocess
# subprocess.Popen('notepad')
# subprocess.Popen('systeminfo')
subprocess.Popen("dir", shell=True)

输出:

 Directory of C:\Users\Dell\Downloads\demo

24/08/2022  07:01 pm    <DIR>          .
24/08/2022  07:01 pm    <DIR>          ..
25/08/2022  01:47 am               460 demo.py
               1 File(s)            460 bytes
               2 Dir(s)  32,532,512,768 bytes free
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迹忆客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值