zoukankan      html  css  js  c++  java
  • 21 python调用外部系统命令

     1 Python中执行系统命令常见的几种方法
     2 一,使用os模块
     3 import os
     4      1,os.system 
     5      
     6        import os     
     7        os.system('cat /proc/cupinfo')      ## 类似于perl中的system命令,不能获取命令返回结果,只返回成功或失败
     8       注意:
     9         本质是调用标准C的system() 函数,仅仅在一个子终端运行系统命令,
    10         ##不能获取命令执行后的返回信息。
    11      
    12      2, os.popen    ##相当于perl中的readpipe 和 ``
    13 
    14         output = os.popen('cat /proc/cpuinfo')    
    15         print output.read()
    16         #print output.readlines()
    17         注意:
    18              
    19         ##执行命令后返回的信息的对象,
    20         ##必须使用read()方法来将结果读取出来
    21         ## 返回的结果是字符串 ,是str的类型
    22         本质是通过一个管道文件将结果返回。
    23         所以进行读写时,里面也是相当于会有文件指针的
    24      
    25 二, 使用模块commands模块
    26 import commands
    27      
    28         (status, output) = commands.getstatusoutput('cat /proc/cpuinfo')
    29      
    30         print status,output
    31         print output    ####一般是只打印出元组中第2个元素即可,第2个才是真正命令的结果,第1个只是返回运行状态
    32 
    33 
    34 
    35 
    36      注意1:在类unix的系统下使用此方法返回的返回值(status)与脚本或命令执行之后的返回值不等,这是因为调用了os.wait()的缘故,
    37      
    38           具体原因就得去了解下系统wait()的实现了。需要正确的返回值(status),只需要对返回值进行右移8位操作就可以了。
    39 
    40      注意2:当执行命令的参数或者返回中包含了中文文字,那么建议使用subprocess。
    41      
    42 三,使用模块subprocess
    43      
    44       Subprocess是一个功能强大的子进程管理模块,是替换os.system ,os.spawn* 等方法的一个模块。
    45      
    46       Class subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, 
    47      
    48                                        stderr=None, preexec_fn=None,  close_fds=True, shell=False, 
    49      
    50                                       cwd=None, env=None, universal_newlines=False, startupinfo=None, 
    51      
    52                                    creationflags=0, restore_signals=True, start_new_session=False, pass_fds=())
    53      
    54      有丰富的参数可以进行配置,可供我们自定义的选项多,灵活性高。
    55      之前我使用os.system的时候遇到文件描述符被子进程继承的问题,后来通过close_fds = False 这个参数来解决的。
  • 相关阅读:
    springboot自动装配原理
    @Inherited 注解的作用
    基础知识点:链表反转
    基础知识点:二叉树的层次遍历
    算法题:8、二进制中1的个数
    微服务_GPRC
    扎实基础_数据结构
    .net core3.0程序发布到linux+docker
    c#_安全漏洞总结
    IIS Express(电脑无管理员权限如何启用VS调试)
  • 原文地址:https://www.cnblogs.com/2mei/p/9254226.html
Copyright © 2011-2022 走看看