您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

Python获取CMD命令行输出结果

时间:2020-03-28 15:07:49  来源:  作者:

一,os.system()

这种方式虽然可以在控制台看到回显的结果,但是却无法接收到这些内容,更无法对结果进行处理

官方文档对返回结果说明如下

windows上,返回值是运行命令后系统外壳程序返回的值。…通常是cmd.exe,它返回命令运行的退出状态;

即os.system()返回值是命令执行后退出的状态,正常为0,异常为1

正常情况

In[5]: os.system("dir")
 Volume in drive F is 数据
 Volume Serial Number is 0006-F904

 Directory of F:PracticePycharmProjectsPythonBasic

2019/04/29  10:17    <DIR>          .
2019/04/29  10:17    <DIR>          ..
2019/04/29  11:45    <DIR>          .idea
2019/03/31  21:36    <DIR>          venv
2019/03/31  21:35    <DIR>          _01_HelloWorld
2019/03/31  21:36    <DIR>          _02_数据类型
...(略)
               0 File(s)              0 bytes
              15 Dir(s)  41,743,155,200 bytes free
Out[5]: 0

注意末尾的Out [5]:0,这才是真正的返回值

异常情况

In[6]: os.system("directory")
'directory' is not recognized as an internal or external command,
operable program or batch file.
Out[6]: 1

Out [6]:1,表示执行出现异常

二,os.popen()

具体用法如下:

result = os.popen('ipconfig')
# 返回的结果是一个<class 'os._wrap_close'>对象,需要读取后才能处理
context = result.read()
for line in context.splitlines():
    print(line)
result.close()

os.popen()的返回值是一个类_wrap_close,需要重定向read()之后才能得到一个str

官方文档对返回值说明:

打开到命令cmd或来自命令cmd的管道。返回值是连接到管道的打开文件对象,可以根据模式是“ r”(默认)还是“ w” 来进行读取或写入。

从命令cmd:一个管道,返回值是连接管道的文件对象,通过该对象可以进行读或写。

三,commands.getstatusoutput()

特别说明:commands模块已经被废弃,并且3.x中已经被删除,这里不做过多说明用法如下:

output = commands.getstatusoutput('ipconfig')  
print  output

四,subprocess.Popen()

从的python2.4版本开始,可以用子这个模块来产生子进程,并连接到子进程的标准输入/输出/错误中去,还可以得到子进程的返回值。子意在替代其他几个老的模块或函数,例如:os.system,os.spawn *,os.popen *,popen2。,命令。subprocess模块​​可用于执行复杂的系统命令,包括os.popen()不适用的交互模式的场景,例如python

相互场景

import subprocess

obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
obj.stdin.write("print('hello world')")
obj.stdin.write("n")
obj.stdin.write("print('hello python')")
obj.stdin.close()

cmd_out = obj.stdout.read()
obj.stdout.close()
cmd_error = obj.stderr.read()
obj.stderr.close()

print(cmd_out)
print(cmd_error)  # 程序没有异常,只输出空行

执行结果:

hello world
hello python

非共有场景

p = subprocess.Popen('ipconfig', shell=True, stdout=subprocess.PIPE)
out, err = p.communicate()
for line in out.splitlines():
    print(line.decode("gbk", "ignore"))

注:如果子进程输出到数据到stdout或stderr的管道,并达到了系统pipe的缓存大小的话,子进程会等待父进程转换管道,而父进程此时正wait着着话,将会产生传说中的死锁。建议使用communication()来避免这种情况的发生。

Popen.communicate(input = None)和子进程交互:发送数据到stdin,并从stdout和stderr读数据,直到收到EOF。等待子进程结束。可选的输入如有有话,要为字符串类型。此函数返回一个元组:(stdoutdata,stderrdata),元素类型为<class'bytes'>,需要进行转码,上面的代码——line.decode(“ gbk”,“ ignore”)

实践案例下面的演示根据系统命令config,获取本机mac地址和IP地址的代码以网上的代码为基础修改

def get_mac_and_ip():
    """
    # 获取本机MAC地址和IP地址
    :return: (MAC地址,IP地址)
    """

    # 使用with,不需要显式的写pipe.close()
    with os.popen('ipconfig -all') as pipe:
        str_config = pipe.read()
        # print("完整配置信息:", str_config)
        # 利用正则表达式和re模块检索结果
        mac_re_compile = re.compile(r"物理地址[. ]+: ([w-]+)")
        ip_re_compile = re.compile(r"IPv4 地址[. ]+: ([.d]+)")

        mac = mac_re_compile.findall(str_config)[0]  # 找到MAC
        ip = ip_re_compile.findall(str_config)[0]  # 找到IP

        # print("MAC=%s, IP=%s" % (mac, ip))

    return mac, ip


result = get_mac_and_ip()
print("MAC: %sn IP: %s" % result)

执行结果

MAC: 26-0A-64-A7-68-84
 IP: 192.168.1.103
Python获取CMD命令行输出结果

 

MAC: 26-0A-64-A7-68-84
 IP: 192.168.1.103


Tags:Python   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
大家好,我是菜鸟哥,今天跟大家一起聊一下Python4的话题! 从2020年的1月1号开始,Python官方正式的停止了对于Python2的维护。Python也正式的进入了Python3的时代。而随着时间的...【详细内容】
2021-12-28  Tags: Python  点击:(1)  评论:(0)  加入收藏
学习Python的初衷是因为它的实践的便捷性,几乎计算机上能完成的各种操作都能在Python上找到解决途径。平时工作需要在线学习。而在线学习的复杂性经常让人抓狂。费时费力且效...【详细内容】
2021-12-28  Tags: Python  点击:(1)  评论:(0)  加入收藏
Python 是一个很棒的语言。它是世界上发展最快的编程语言之一。它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性。整个 Python 及其库的生态系统使...【详细内容】
2021-12-27  Tags: Python  点击:(2)  评论:(0)  加入收藏
菜单驱动程序简介菜单驱动程序是通过显示选项列表从用户那里获取输入并允许用户从选项列表中选择输入的程序。菜单驱动程序的一个简单示例是 ATM(自动取款机)。在交易的情况下...【详细内容】
2021-12-27  Tags: Python  点击:(4)  评论:(0)  加入收藏
近日只是为了想尽办法为 Flask 实现 Swagger UI 文档功能,基本上要让 Flask 配合 Flasgger, 所以写了篇 Flask 应用集成 Swagger UI 。然而不断的 Google 过程中偶然间发现了...【详细内容】
2021-12-23  Tags: Python  点击:(6)  评论:(0)  加入收藏
有不少同学学完Python后仍然很难将其灵活运用。我整理15个Python入门的小程序。在实践中应用Python会有事半功倍的效果。01 实现二元二次函数实现数学里的二元二次函数:f(x,...【详细内容】
2021-12-22  Tags: Python  点击:(32)  评论:(0)  加入收藏
Verilog是由一个个module组成的,下面是其中一个module在网表中的样子,我只需要提取module名字、实例化关系。module rst_filter ( ...); 端口声明... wire定义......【详细内容】
2021-12-22  Tags: Python  点击:(9)  评论:(0)  加入收藏
运行环境 如何从 MP4 视频中提取帧 将帧变成 GIF 创建 MP4 到 GIF GUI ...【详细内容】
2021-12-22  Tags: Python  点击:(6)  评论:(0)  加入收藏
面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计。类(Class)和对象(Object)类是用来描述具有相同属性和方法对象的集合。对象是类的具体实例。比如,学生都有...【详细内容】
2021-12-22  Tags: Python  点击:(9)  评论:(0)  加入收藏
所谓内置函数,就是Python提供的, 可以直接拿来直接用的函数,比如大家熟悉的print,range、input等,也有不是很熟,但是很重要的,如enumerate、zip、join等,Python内置的这些函数非常...【详细内容】
2021-12-21  Tags: Python  点击:(5)  评论:(0)  加入收藏
▌简易百科推荐
大家好,我是菜鸟哥,今天跟大家一起聊一下Python4的话题! 从2020年的1月1号开始,Python官方正式的停止了对于Python2的维护。Python也正式的进入了Python3的时代。而随着时间的...【详细内容】
2021-12-28  菜鸟学python    Tags:Python4   点击:(1)  评论:(0)  加入收藏
学习Python的初衷是因为它的实践的便捷性,几乎计算机上能完成的各种操作都能在Python上找到解决途径。平时工作需要在线学习。而在线学习的复杂性经常让人抓狂。费时费力且效...【详细内容】
2021-12-28  风度翩翩的Python    Tags:Python   点击:(1)  评论:(0)  加入收藏
Python 是一个很棒的语言。它是世界上发展最快的编程语言之一。它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性。整个 Python 及其库的生态系统使...【详细内容】
2021-12-27  IT资料库    Tags:Python 库   点击:(2)  评论:(0)  加入收藏
菜单驱动程序简介菜单驱动程序是通过显示选项列表从用户那里获取输入并允许用户从选项列表中选择输入的程序。菜单驱动程序的一个简单示例是 ATM(自动取款机)。在交易的情况下...【详细内容】
2021-12-27  子冉爱python    Tags:Python   点击:(4)  评论:(0)  加入收藏
有不少同学学完Python后仍然很难将其灵活运用。我整理15个Python入门的小程序。在实践中应用Python会有事半功倍的效果。01 实现二元二次函数实现数学里的二元二次函数:f(x,...【详细内容】
2021-12-22  程序汪小成    Tags:Python入门   点击:(32)  评论:(0)  加入收藏
Verilog是由一个个module组成的,下面是其中一个module在网表中的样子,我只需要提取module名字、实例化关系。module rst_filter ( ...); 端口声明... wire定义......【详细内容】
2021-12-22  编程啊青    Tags:Verilog   点击:(9)  评论:(0)  加入收藏
运行环境 如何从 MP4 视频中提取帧 将帧变成 GIF 创建 MP4 到 GIF GUI ...【详细内容】
2021-12-22  修道猿    Tags:Python   点击:(6)  评论:(0)  加入收藏
面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计。类(Class)和对象(Object)类是用来描述具有相同属性和方法对象的集合。对象是类的具体实例。比如,学生都有...【详细内容】
2021-12-22  我头秃了    Tags:python   点击:(9)  评论:(0)  加入收藏
所谓内置函数,就是Python提供的, 可以直接拿来直接用的函数,比如大家熟悉的print,range、input等,也有不是很熟,但是很重要的,如enumerate、zip、join等,Python内置的这些函数非常...【详细内容】
2021-12-21  程序员小新ds    Tags:python初   点击:(5)  评论:(0)  加入收藏
Hi,大家好。我们在接口自动化测试项目中,有时候需要一些加密。今天给大伙介绍Python实现各种 加密 ,接口加解密再也不愁。目录一、项目加解密需求分析六、Python加密库PyCrypto...【详细内容】
2021-12-21  Python可乐    Tags:Python   点击:(8)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条