• subprocess


    python2.x 中使用os 模块来在执行系统命令。

    其中两个方法值得关注

    os.sys('df -h')

    os.Popen('df -h')

    其中os.sys() 最终返回的是执行命令的成功与否的状态

    而os.Popen() 就相当于开启了一个临时文件,把执行结果放到这个临时文件中。于是你想得到执行结果就需要os.Popen('df -h').read()

    python3.x 中执行系统命令就不要再用os模块了,因为有subprocess模块,必定人要往前看,别用一些过时的技术。

    subprocess模块怎么使用,详细的你去搜,我这就是一个常用的,方法如下:

    >>>command_exec_result = subprocess.Popen('df -lh',shell=True,stdout=subprocess.PIPE).stdout.read()
    
    >>> print(command_exec_result.decode())
    Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
    /dev/disk1 465Gi 273Gi 191Gi 59% 1325893 4293641386 0% /

    来解释下:

    1. subprocess.Popen('df -lh',shell=True)这样就执行了。但不能通过这个.read()来获取结果。为什么呢?
    因为上面的命令,就相当于你在python中调用subprocess模块下的Popen方法,这个方法得到'df -lh'和 shell=True两个参数,接下来它就开启了一个linux子进程, 我们知道进程 和子进程是不能访问共享数据的。所以你不能直接通过.read()获取结果。
    那么怎么获得呢?我们在shell环境中经常使用管道符号“|”获取一个命令的结果传给下一个命令。这里:subprocess.Popen('df -lh',shell=True,stdout=subprocess.PIPE) 中的stdout=subprocess.PIPE 就是管道。这里是stdout,还有stderr但是不常用。
    2.
    print(command_exec_result.decode())这里为什么command_exec_result.decode(),因为在python3中用subprocess执行的结果是bytes,用decode()方法获取string.
    这里扩展一个小知识:
    python2.x中 bytes 和 string没有啥区别。
    python3.x中bytes和string就区分了。并且python3.x默认用的字符编码是utf-8,所以默认支持中文。
    字符串.encode()是将string转换成bytes
    b'ss'.decoude()是将bytes转换成了utf-8编码形式的字符串。



  • 相关阅读:
    笔记类产品会不会衰落?
    ios 性能优化概述
    一个简单的旋转加载动画设计的思路
    常用算法的C++实现
    [转]解决Ionic2 innerHTML 无法嵌入HTML
    How to debug an Angular 2 application with Chrome and VS Code
    Angularjs2-下拉列表实现(父子组件通信)
    Angular 2 HTTP Requests with Observables
    Ionic2 beta8后更新的内容
    ionic2中如何使用自动生成器
  • 原文地址:https://www.cnblogs.com/zhming26/p/6283285.html
Copyright © 2020-2023  润新知