python3执行linux命令返回码_python执行linux命令返回结果 - CSDN
精华内容
参与话题
  • python执行linux命令返回执行结果

    万次阅读 2018-10-12 18:42:00
    需要得到命令执行的状态则需要判断$?的值, 在Python中有一个模块commands也很容易做到以上的效果 ...用os.popen()执行命令cmd, 然后返回两个元素的元组(status, result),其中 status为int类型,resul...

    需要得到命令执行的状态则需要判断$?的值, 在Python中有一个模块commands也很容易做到以上的效果
    看一下三个函数:
    1). commands.getstatusoutput(cmd)   # 此函数也可以执行编译好的文件,cmd='./a.out'
    用os.popen()执行命令cmd, 然后返回两个元素的元组(status, result),其中 status为int类型,result为string类型。cmd执行的方式是{ cmd ; } 2>&1, 这样返回结果里面就会包含标准输出和标准错误.
    2). commands.getoutput(cmd)
    只返回执行的结果, 忽略返回值.
    3). commands.getstatus(file) #现已被弃用
    返回ls -ld file执行的结果.

    使用示例:

    >>> import commands
    
    >>> commands.getstatusoutput('ls /bin/ls')      # 执行成功状态码返回0
    
    (0, '/bin/ls')
    
    >>> commands.getstatusoutput('cat /mm/test')  # 执行失败状态码返回256
    
    (256, 'cat: /mm/test: No such file or directory')
    
    >>> commands.getstatus('/bin/ls')    #该函数已被python丢弃,不建议使用,它返回 ls -ld file 的结果(String)
    
    '-rwxr-xr-x 1 root 13352 Oct 14 1994 /bin/ls'

     

    展开全文
  • python执行linux命令(调用linux命令)

    万次阅读 2017-06-19 10:39:40
    #传参调用exe程序(解决相对路径,觉得路径问题),等待exe进程结束,此程序才结束。 # -*- coding: utf-8-*- import os, os.path, sys import win32process, win32event exe_path = sys.argv[1] ...
    #传参调用exe程序(解决相对路径,觉得路径问题),等待exe进程结束,此程序才结束。
    
    # -*- coding: utf-8-*-
    
    import os, os.path, sys
    import win32process, win32event
    
    exe_path = sys.argv[1]
    exe_file = sys.argv[2]
    
    #os.chdir(exe_path)
    
    try :
            handle = win32process.CreateProcess(os.path.join(exe_path, exe_file),
                    '', None, None, 0,
                    win32process.CREATE_NO_WINDOW,
                    None ,
                    exe_path,
                    win32process.STARTUPINFO())
            running = True       
    except Exception, e:
            print "Create Error!"
            handle = None
            running = False
    
    while running :
            rc = win32event.WaitForSingleObject(handle[0], 1000)
            if rc == win32event.WAIT_OBJECT_0:
                    running = False
    #end while
    print "GoodBye"
     

    #需要用的模块:pywin32-214.win32-py2.5.exe 

    把改程序做成exe程序,就可以任何地方调用了(windows系统下)。


    ===========================================================================

    两者均需 import os

    (1) os.system

    # 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息

    system(command) -> exit_status
    Execute the command (a string) in a subshell.

    # 如果再命令行下执行,结果直接打印出来

    >>> os.system('ls')
    04101419778.CHM   bash      document    media      py-django   video
    11.wmv            books     downloads   Pictures  python
    all-20061022      Desktop   Examples    project    tools

    (2) os.popen

    # 该方法不但执行命令还返回执行后的信息对象

    popen(command [, mode='r' [, bufsize]]) -> pipe
    Open a pipe to/from a command returning a file object.

    ---------------------------------------------------------------------

    p=os.popen('ssh 10.3.16.121 ps aux | grep MySQL')
    x=p.read()
    print x
    p.close()

    例如:

    >>>tmp = os.popen('ls *.py').readlines()
    >>>tmp
    Out[21]:
    ['dump_db_pickle.py ',
    'dump_db_pickle_recs.py ',
    'dump_db_shelve.py ',
    'initdata.py ',
    '__init__.py ',
    'make_db_pickle.py ',
    'make_db_pickle_recs.py ',
    'make_db_shelve.py ',
    'peopleinteract_query.py ',
    'reader.py ',
    'testargv.py ',
    'teststreams.py ',
    'update_db_pickle.py ',
    'writer.py ']

    好处在于:将返回的结果赋于一变量,便于程序的处理。

    (3)  使用模块subprocess

    >>> import subprocess
    >>> subprocess.call (["cmd", "arg1", "arg2"],shell=True)

    获取返回和输出:

    import subprocess
    p = subprocess.Popen('ls', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    for line in p.stdout.readlines():
        print line,
    retval = p.wait()
    (4)  使用模块commands模块

     import os
    
    import commands
    
    方法1)使用commands.getstatusoutput方法,这是一个神奇的方法,能够直接得到返回值以及命令输出。官网说明:http://docs.python.org/library/commands.html
    
            status,output=commands.getstatusoutput(cmdstr)
    
    ***********************下面代码是判断返回值**********************************************************
            if False==os.WIFEXITED(status) or 0!=os.WEXITSTATUS(status):                       
                self.logging.info("check port false. port [%s] has not been listened. cmdstr: [%s]", port, cmdstr)                                                        
                return False 
            self.logging.info("check port true. port [%s] has been listened. cmdstr: [%s]", cmdstr) 
            return True       
    
    status是返回值,ouput是输出
    
    但是这种方法存在一个问题,就是如果命令中(cmdstr)含有&符号,这个命令会出错,此时,需要使用os.system方法

    >>> import commands
    >>> dir(commands)
    ['__all__', '__builtins__', '__doc__', '__file__', '__name__', 'getoutput', 'getstatus', 'getstatusoutput','mk2arg', 'mkarg']
    >>> commands.getoutput("date")
    'Wed Jun 10 19:39:57 CST 2009'
    >>>
    >>> commands.getstatusoutput("date")
    (0, 'Wed Jun 10 19:40:41 CST 2009')
    注意: 当执行命令的参数或者返回中包含了中文文字,那么建议使用subprocess,如果使用os.popen则会出现下面的错误:
    Traceback (most recent call last):
    File "./test1.py", line 56, in <module>
      main()
    File "./test1.py", line 45, in main
      fax.sendFax()
    File "./mailfax/Fax.py", line 13, in sendFax
      os.popen(cmd)
    UnicodeEncodeError: 'ascii' codec can't encode characters in position 46-52: ordinal not in range(128)
    (5)使用模块pbs

    >>> import pbs
    
    >>> pbs.pwd()
    
    /var/log
    
    >>> pbs.hostname()
    
    waf-dev
    
    >>> pbs.ifconfig('eth1')
    
    eth1      Link encap:以太网  硬件地址 00:50:56:94:db:20
    
              inet 地址:182.168.1.1  广播:192.2.255.255  掩码:255.255.0.0
    
              inet6 地址: fe80::250:56ff:fe94:db20/64 Scope:Link
    
              UP BROADCAST RUNNING MULTICAST  MTU:1500  跃点数:1
    
              接收数据包:3229133 错误:0 丢弃:0 过载:0 帧数:0
    
              发送数据包:2215454 错误:0 丢弃:0 过载:0 载波:0
    
              碰撞:0 发送队列长度:1000
    
              接收字节:452148544 (452.1 MB)  发送字节:1095951536 (1.0 GB)
    
    >>> pbs.ping('g.cn', c=3)
    
    PING g.cn (203.208.45.208) 56(84) bytes of data.
    
    64 bytes from 203.208.45.208: icmp_seq=1 ttl=48 time=13.1 ms
    
    64 bytes from 203.208.45.208: icmp_seq=2 ttl=48 time=12.4 ms
    
    64 bytes from 203.208.45.208: icmp_seq=3 ttl=48 time=11.6 ms
    
    --- g.cn ping statistics ---
    
    3 packets transmitted, 3 received, 0% packet loss, time 2003ms
    
    rtt min/avg/max/mdev = 11.675/12.430/13.125/0.593 ms

    ==========================================================================================


    1.1   os.system(command)

    在一个子shell中运行command命令,并返回command命令执行完毕后的退出状态。这实际上是使用C标准库函数system()实现的。这个函数在执行command命令时需要重新打开一个终端,并且无法保存command命令的执行结果。

    1.2   os.popen(command,mode)

    打开一个与command进程之间的管道。这个函数的返回值是一个文件对象,可以读或者写(由mode决定,mode默认是’r')。如果mode为’r',可以使用此函数的返回值调用read()来获取command命令的执行结果。

    os.system(cmd)或os.popen(cmd),前者返回值是脚本的退出状态码,后者的返回值是脚本执行过程中的输出内容。实际使用时视需求情况而选择。

    1.3   commands.getstatusoutput(command)

      使用commands.getstatusoutput函数执行command命令并返回一个元组(status,output),分别表示command命令执行的返回状态和执行结果。对command的执行实际上是按照{command;} 2>&1的方式,所以output中包含控制台输出信息或者错误信息。output中不包含尾部的换行符。

    实例:

    >>>import commands

    >>> status, output = commands.getstatusoutput('ls -l')

    使用subprocess模块可以创建新的进程,可以与新建进程的输入/输出/错误管道连通,并可以获得新建进程执行的返回状态。使用subprocess模块的目的是替代os.system()、os.popen*()、commands.*等旧的函数或模块。

    2.1   subprocess.call(["some_command","some_argument","another_argument_or_path"])

    subprocess.call(command,shell=True)

    实例:

    handle = subprocess.call('ls -l', shell=True)

    2.2   subprocess.Popen(command, shell=True)

    如果command不是一个可执行文件,shell=True不可省。

      最简单的方法是使用class subprocess.Popen(command,shell=True)。Popen类有Popen.stdin,Popen.stdout,Popen.stderr三个有用的属性,可以实现与子进程的通信。 【linux公社 http://www.linuxidc.com 】

    将调用shell的结果赋值给python变量

    handle = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)

    实例:

    handle = subprocess.Popen('ls -l', stdout=subprocess.PIPE, shell=True)

    handle = subprocess.Popen(['ls','-l'], stdout=subprocess.PIPE, shell=True)

    handle = subprocess.Popen(args='ls -l', stdout=subprocess.PIPE, shell=True)

    print handle.stdout.read()

    print handle.communicate()[0]



    展开全文
  • Python3 执行Linux Bash命令

    万次阅读 2017-08-19 10:59:58
    和之前C++执行Linux Bash命令 一样,Python依然支持system调用和popen()函数来执行linux bash命令。方法一:system调用#仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息 import os os.system('ls')...

    和之前C++执行Linux Bash命令 一样,Python依然支持system调用和popen()函数来执行linux bash命令。

    方法一:system调用

    #仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息
    import os
    os.system('ls')

    方法二:popen()函数

    import os
    os.popen('ls').readlines() #这个返回值是一个list

    方法三.使用模块 subprocess

    import subprocess
    subprocess.call('ls') #可以直接call()调用
    
    '''
    #也可以使用subprocess.Popen
    p = subprocess.Popen('ls', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    for line in p.stdout.readlines():
        print(line)
    
    '''
    
    展开全文
  • 注意要在终端中执行命令python test.py os.system(cmd) 返回值为0:代表成功;1:代表失败 os.popen(cmd) 将执行结果返回,但是测试表示并没有,具体原因后期记得更新 连续执行多条命令 os.popen("cd.. &...

    个人笔记:

     python 文件单独执行文件

    注意要在终端中执行命令:python test.py

    os.system(cmd)  返回值为0:代表成功;1:代表失败

    os.popen(cmd) 将执行结果返回,但是测试表示并没有,具体原因后期记得更新

    连续执行多条命令

    os.popen("cd.. && cd demo && touch 2.py ") 

    注意:

    1. 命令被分号“;”分隔,这些命令会顺序执行下去;
    2. 命令被“&&”分隔,这些命令会顺序执行下去,遇到执行错误的命令停止;
    3. 命令被双竖线“||”分隔,这些命令会顺序执行下去,遇到执行成功的命令停止,后面的所有命令都将不会执行;

    例子:

    目录结构:

    代码:

    import os
    
    if __name__ == '__main__':
        a = os.system("ls -a")#单独 os.system
        print(a)
        print("-----------------")
        a = os.popen("touch 8.java") #单独 os.popen
        print(a)
        print("-----------------")
        print(os.popen("cd.. && cd demo && touch 2.py ")) #连续执行三条命令
    

    结果:

     

    展开全文
  • python执行命令行的方法

    万次阅读 2015-09-26 23:37:20
    1.os.system(command) ...linux上,返回值为执行命令的exit值;而windows上,返回值则是运行命令后,shell的返回值。注意,该方法是没办法得到运行命令的输出的。 2.os.popen 该方法返回的是file
  • 我们使用Python如何调用Linux的Shell命令: 如在linux系统下,直接import os 模块即可下面介绍下如何在windows下使用python远程调用Sehll1.登录到远程linux服务器需要导入模块import paramiko2.定义函数,登录操作...
  • (转)python执行linux命令

    千次阅读 2011-08-18 13:20:10
    python执行linux命令: os.system(cmd) 如果要把返回信息置入变量中: textlist = os.popen(cmd) 例: cmd = 'ps -ef ' textlist = os.popen(cmd).readlines() fo
  • Linux查看文件路径

    万次阅读 2017-12-21 16:22:58
    Linux下有两个命令可以查看命令或者文件所在的位置 1.which which 用来查看当前要执行命令所在的路径 举个例子: [root@admin ~]# which python /usr/bin/python 意思就是说:如果我直接输入 python ,那么输出的...
  • 特殊变量来保存最后一条命令执行结束的退出状态。执行完一条命令后,立即执行echo$?,可以查看最后一条命令的退出状态值。 正常的情况下,命令成功执行完成的退出状态是0,如果非0,则命令执行有错。 该命令可以用于...
  • Linux中搭建Python环境

    万次阅读 2018-10-13 21:32:15
    我们知道Linux是为编程所设计,因此很多的Linux中默认安装了Python,所以为了确定你的Linux中是否已安装Python,首先需要检查Python版本。搭建Python环境步骤如下: 1、检查Python版本  1)在你的系统中打开终端...
  • python学习之--调用shell脚本

    万次阅读 2015-07-13 15:47:46
    python调用Shell脚本,有很多种方法,下面给出了三个python执行shell命令的方法 第一种方案:os.system os.system返回脚本的退出状态 现有一个shell脚本1.sh #!/bin/sh echo "hello world!!"在python中调用shell...
  • Linux系统默认已经安装Python(本文以Ubuntu系统为基础说明)。  若希望检查系统中的Python版本,可...3)若需要退出当前编辑返回终端,执行命令 exit()或 执行Crtl+D  1、安装Geany文本编辑器 打开终端(Terminal
  • 一般我部署一个python的tornado项目 我会执行如下命令 nohup python3 manage.py & 然后会在当前目录下生成一个nohup.out的文件记录打印信息 那么我可不可以不要nohup.out这个文件 我把这些打印的信息记录到另外一个...
  • Python编程:subprocess执行命令行命令

    万次阅读 2019-01-12 17:28:40
    函数 说明 os.system(command) 返回状态执行结果输出到屏幕 os.popen(command).read() ...执行指定的命令,等待命令执行完成后返回一个包含执行结果的CompletedProcess类的实例 subprocess.call() ...
  • PYTHON的程序在LINUX后台运行

    万次阅读 2010-07-25 15:50:00
     PYTHON的程序在LINUX后台运行1.nohup 命令 nohup   nohup 命令   用途:LINUX命令用法,不挂断地运行命令。   语法:nohup Command [ Arg ... ] [ & ]   描述:nohup ...
  • Python之连接linux执行命令

    千次阅读 2016-11-10 18:51:41
    Python之连接linux执行命令 1.安装模块paramiko,下载地址: http://download.csdn.net/detail/clean_water/9679325 2.实例代码 -------------------------------------------------- #!/usr/bin/env ...
  • 脚本如下,os.system()直接执行linux下的命令,os.popen()执行linux下的命令并且返回执行后的结果。 import os ret_text_list = os.popen("ps | grep python") pid_list = [] for line in ret_text_list: pid_...
  • 下面说一下在C和python中如何调用linux命令、得到返回值并得到输出 1. python,使用os库/commands库 方法1)使用commands.getstatusoutput方法,这是一个神奇的方法,能够直接得到返回值以及命令输出。官网
  • python 执行shell命令并将结果保存

    万次阅读 2017-06-17 12:58:52
    方法1: 将shell执行的结果保存到字符串 def run_cmd(cmd):  result_str=''  process = subprocess.Popen(cmd, shell=True,  stdout=subprocess.PIPE, stderr=subprocess.PIPE)  result_f = process.std
1 2 3 4 5 ... 20
收藏数 64,414
精华内容 25,765
关键字:

python3执行linux命令返回码