python执行系统命令

os库中的os.system()只能获取命令是否运行成功,不能获取命令的屏幕输出以及报错信息。
os.popen()可以获取命令的屏幕输出,但是无法区分成功或者失败信息。
使用 subprocess库可以实现:

import os
import re
import subprocess
def subprocess_popen(command, work_dir = None, se_PIPE = True, so_PIPE = True):
    # 执行系统命令
    # command: str, 要执行的命令
    # work_dir: str, 在哪个目录下执行改目录,None表示在当前工作目录执行
    # se_PIPE: bool, 是否捕获标准错误输出作为函数返回值,否则输出到屏幕
    # so_PIPE: bool, 是否捕获标准输出作为函数返回值,否则输出到屏幕
    # 返回值为一个元组:(list: 标准输出,list: 标准错误输出, int: 命令状态码)
    code = 'gbk' if os.name == 'nt' else 'utf-8'
    so = subprocess.PIPE if so_PIPE else None   # 指定标准输出到哪
    se = subprocess.PIPE if se_PIPE else None   # 指定标准错误输出到哪
    p = subprocess.Popen(command, shell=True, stdout=so, stderr=se, cwd=work_dir)
    data, error = p.communicate()    # communicate()等待子进程结束,从stdout和stderr读数据返回元组
    data, error = ('' if i is None else i.decode(code) for i in (data, error))
    result = re.split(r'[\r\n]+', data.strip('\r\n'))
    error_info = re.split(r'[\r\n]+', error.strip('\r\n'))
    return result, error_info, p.returncode
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容