• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    详解Python调用系统命令的六种方法

    作为胶水语言,Python可以很方便的执行系统命令,Python3中常用的执行操作系统命令有os.system()、os.popen()、subprocess.popen()、subprocess.call()、subprocess.run()、subprocess.getstatusoutput()六种方法。

    os.system()

    system函数可以将字符串转化成命令在服务器上运行;其原理是每一条system函数执行时,其会创建一个子进程在系统上执行命令行,子进程的执行结果无法影响主进程。

    其返回值是指令运行后返回的状态码,0表示指令成功执行,1表示失败,256表示没有返回结果,该方法适用于系统命令不需要输出内容的场景。

    用法:

    os.system("command")
    
    

    示例:

    import os
    a=os.system("ping 192.168.1.101") #使用a接收返回值
    print(a)
    
    

    输出:

    正在 Ping 192.168.1.101 具有 32 字节的数据:
    来自 192.168.1.101 的回复: 字节=32 时间=8ms TTL=127
    来自 192.168.1.101 的回复: 字节=32 时间=2ms TTL=127
    来自 192.168.1.101 的回复: 字节=32 时间=2ms TTL=127
    来自 192.168.1.101 的回复: 字节=32 时间=2ms TTL=127

    192.168.1.101 的 Ping 统计信息:
        数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
    往返行程的估计时间(以毫秒为单位):
        最短 = 2ms,最长 = 8ms,平均 = 3ms
    0
    Process finished with exit code 0

    也可以在linux系统下运行

    import os
    os.system('cd /home  mkdir test') 执行多条命令可以使用连接
    

    os.popen(command,mode)

    这种调用方式是通过管道的方式来实现,这个函数的返回值是一个文件对象,可以读或者写(由mode决定,mode默认是'r')。如果mode为'r',调用该对象的read()或readlines()方法可以读取输出内容。

    用法:os.popen(command[, mode[, bufsize]])

    os.system(cmd)或os.popen(cmd),前者返回值是脚本的退出状态码,后者的返回值是脚本执行过程中的输出内容。

    import os
    a=os.popen("ipconfig")
    print(a.read())
    

    输出:
    以太网适配器 以太网:

       连接特定的 DNS 后缀 . . . . . . . :
       本地链接 IPv6 地址. . . . . . . . : fe81::b0ed:2b1b:7385:97d1%8
       IPv4 地址 . . . . . . . . . . . . : 192.168.1.100
       子网掩码  . . . . . . . . . . . . : 255.255.255.0
       默认网关. . . . . . . . . . . . . : 192.168.1.1

    subprocess模块

    subprocess模块是python从2.4版本开始引入的模块,主要用来取代 一些旧的模块方法,如os.system、os.spawn、os.popen、commands.*等。官方推荐使用该模块执行系统命令,subprocess模块通过子进程来执行外部指令,并通过input/output/error管道,获取子进程的执行的返回信息。

    好处在于:运用对线程的控制和监控,将返回的结果赋于一变量,便于程序的处理。

    subprocess.Popen()

    使用Popen可以创建进程,并与进程进行复杂的交互。

    用法:child = subprocess.Popen(["cmd","arg1"...])

    常用参数说明:

    示例

    from subprocess import PIPE, Popen
    
    # 返回的是 Popen 实例对象
    proc = Popen(
      'ipconfig', # cmd特定的查询空间的命令
      stdin=None, # 标准输入 键盘
      stdout=PIPE, # -1 标准输出(演示器、终端) 保存到管道中以便进行操作
      stderr=PIPE, # 标准错误,保存到管道
      shell=True)
    
    # print(proc.communicate()) # 标准输出的字符串+标准错误的字符串
    outinfo, errinfo = proc.communicate()
    print(outinfo.decode('gbk')) # 外部程序(windows系统)决定编码格式
    print(errinfo.decode('gbk'))
    
    

    输出:

    以太网适配器 以太网:

       连接特定的 DNS 后缀 . . . . . . . :
       本地链接 IPv6 地址. . . . . . . . : fe81::b0ed:2b1b:7385:97d1%8
       IPv4 地址 . . . . . . . . . . . . : 192.168.1.100
       子网掩码  . . . . . . . . . . . . : 255.255.255.0
       默认网关. . . . . . . . . . . . . : 192.168.1.1


    Process finished with exit code 0

    subprocess.call()

    执行指定的命令, 返回命令执行状态, 功能类似os.system(cmd),参数shell默认为False

    用法:subprocess.call("command")

    # linux获取磁盘空间
    import subprocess
    subprocess.call(['df', '-h']) # 数组作为参数运行命令
    
    

    输出:
    Filesystem      Size  Used Avail Use% Mounted on
    devtmpfs        909M     0  909M   0% /dev
    tmpfs           920M   32K  920M   1% /dev/shm
    tmpfs           920M  472K  919M   1% /run
    tmpfs           920M     0  920M   0% /sys/fs/cgroup
    /dev/vda1        50G  6.2G   41G  14% /
    tmpfs           184M     0  184M   0% /run/user/0

    subprocess.run()

    python3.5中新增的函数, 执行指定的命令, 等待命令执行完成后返回一个包含执行结果的CompletedProcess类的实例。run默认不会返回输出,只返回命令和执行状态。

    用法:

    subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, timeout=None, check=False, universal_newlines=False)

    import subprocess
    completed = subprocess.run(['ls', '-1'])
    print('returncode:', completed.returncode)
    

    subprocess.getstatusoutput()

    执行cmd命令,返回一个元组(命令执行状态,命令执行结果输出)。

    返回状态码和结果,0表示成功

    import subprocess
    ret, val = subprocess.getstatusoutput("ping www.baidu.com")
    print(ret)
    print(val)
    
    

    输出:
    0

    正在 Ping www.a.shifen.com [14.215.177.39] 具有 32 字节的数据:
    来自 14.215.177.39 的回复: 字节=32 时间=29ms TTL=53
    来自 14.215.177.39 的回复: 字节=32 时间=29ms TTL=53
    来自 14.215.177.39 的回复: 字节=32 时间=29ms TTL=53
    来自 14.215.177.39 的回复: 字节=32 时间=30ms TTL=53

    14.215.177.39 的 Ping 统计信息:
        数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
    往返行程的估计时间(以毫秒为单位):
        最短 = 29ms,最长 = 30ms,平均 = 29ms

    关于subprocess模块的具体用法,大家可以查看文档进行学习https://docs.python.org/3/library/subprocess.html。

    到此这篇关于详解Python调用系统命令的六种方法的文章就介绍到这了,更多相关Python调用系统命令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • Python实现类似jQuery使用中的链式调用的示例
    • 解决python调用matlab时的一些常见问题
    • Python调用R语言实例讲解
    • python程序调用远程服务的步骤详解
    • 使用pycallgraph分析python代码函数调用流程以及框架解析
    • Python与C/C++的相互调用案例
    • python调用百度AI接口实现人流量统计
    • 安装python依赖包psycopg2来调用postgresql的操作
    • Python调用系统命令os.system()和os.popen()的实现
    • 详解如何在VS2019和VScode中配置C++调用python接口
    • python中如何实现链式调用
    上一篇:教你一分钟在win10终端成功安装Pytorch的方法步骤
    下一篇:python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    详解Python调用系统命令的六种方法 详解,Python,调用,系统,命令,