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

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

从Python脚本中执行CMD命令并获得输出的方法os.system()

我们在命令提示符或任何其他终端中执行终端命令是为了不同的目的。但是,有时候,在脚本中运行一个特定的命令是必要的。

我们将看到我们如何在Python脚本中直接执行它们。这在我们处理服务器配置时很方便。

首先,让我们向你展示一些在终端工作的命令,如dircd ,或md

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

现在,我们将看看如何在Python脚本中包含同样的命令。要做到这一点,我们将导入一个叫做os 的模块。

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

让我们跳到代码中。system() 是一个在like 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)

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

有很多命令你可以执行。你可以打开记事本或计算器,或者你可以看到你的系统信息和更多。

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

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

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

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

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

我们可以在任何地方使用这些命令,如类、循环和函数。这将正确地工作,因为它没有把它包装在一个函数中。

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:UsersDellDownloadsdemo
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

你可以从这里了解更多关于subprocess 模块的信息。