python运行linux命令_在linux下python运行linux的命令 - CSDN
精华内容
参与话题
  • 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]



    展开全文
  • 注意要在终端中执行命令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 ")) #连续执行三条命令
    结果:


    原文:https://blog.csdn.net/GodDavide/article/details/86514705 

    展开全文
  • Python 运维 Linux基本命令(一)

    千次阅读 2018-11-02 18:02:00
    1. Linux 运维工程师的职责 2. 开发、测试、运维工程师的开发流程 开发需要将项目代码实现–&amp;amp;amp;gt;提交给测试工程师进行测试–&amp;amp;amp;gt;测试完成后,提交给运维工程师进行上线,发布...

    1. Linux 运维工程师的职责
    在这里插入图片描述

    2. 开发、测试、运维工程师的开发流程

    在这里插入图片描述

    开发需要将项目代码实现–>提交给测试工程师进行测试–>测试完成后,提交给运维工程师进行上线,发布、运行、维护,给用户提供服务(数据服务)

    3.Centos、Ubuntu、Debian三个都是Linux非常优秀的系统,开源,分收费的商业版和免费版
    Centos 是从Redhat源代码编译重新发布版,命令行操作可以方便管理系统和应用,并且有帮助文档和社区的支持
    Ubuntu 有着靓丽的用户界面,完善的包管理系统,强大的软件源支持,丰富的技术社区,并且对计算机硬件的要求优于Centos和Debian,兼容性强,但对于服务器来说,并不需要太多的应用程序,需要的稳定,操作方便,维护简单的系统
    4.Linux常用的命令 shell命令行来实现的
    pwd 获取当前目录的绝对路径
    cd change direct 改变目录
    ls 查看目录下的所有文件
    docker images 查看当前目录下的所有镜像
    vi 输入 i 表示编辑 输入:w 写入文件并保存 输入:q 退出
    可以连写 :wq 写入保存并退出
    :q! 强制退出
    cat filename 表示将filename文件内容打印到终端
    cp file1 newfile1 拷贝file1并新建newfile1文件
    cp -r 目录1 目录2 拷贝目录1 并新建目录2
    -r 表示递归复制目录大的内容
    rm filename 删除文件 删除文件目录需加 -r
    mv -f file1 file2 将file1强制放入file2中
    tar -cvf file filename1 将文件压缩到file中
    tar -xvf file 将file文件解压

    5.Linux 系统的目录结构
    在这里插入图片描述

    第一列 表示文件的权限 由二进制组成 分为三组 最高权限为7 分为读写 只读 只写
    第二列 表示文件下数量
    第三列 文件的时间
    第四列 文件的名称

    在这里插入图片描述

    命令

    功能说明

    线上查询及帮助命令 (2 个)

    man

    查看命令帮助,命令的词典,更复杂的还有 info,但不常用。

    help

    查看 Linux 内置命令的帮助,比如 cd 命令。

    文件和目录操作命令 (18 个)

    ls

    全拼 list,功能是列出目录的内容及其内容属性信息。

    cd

    全拼 change directory,功能是从当前工作目录切换到指定的工作目录。

    cp

    全拼 copy,其功能为复制文件或目录。

    find

    查找的意思,用于查找目录及目录下的文件。

    mkdir

    全拼 make directories,其功能是创建目录。

    mv

    全拼 move,其功能是移动或重命名文件。

    pwd

    全拼 print working directory,其功能是显示当前工作目录的绝对路径。

    rename

    用于重命名文件。

    rm

    全拼 remove,其功能是删除一个或多个文件或目录。

    rmdir

    全拼 remove empty directories,功能是删除空目录。

    touch

    创建新的空文件,改变已有文件的时间戳属性。

    tree

    功能是以树形结构显示目录下的内容。

    basename

    显示文件名或目录名。

    dirname

    显示文件或目录路径。

    chattr

    改变文件的扩展属性。

    lsattr

    查看文件扩展属性。

    file

    显示文件的类型。

    md5sum

    计算和校验文件的 MD5 值。

    查看文件及内容处理命令(21 个)

    cat

    全拼 concatenate,功能是用于连接多个文件并且打印到屏幕输出或重定向到指定文件中。

    tac

    tac 是 cat 的反向拼写,因此命令的功能为反向显示文件内容。

    more

    分页显示文件内容。

    less

    分页显示文件内容,more 命令的相反用法。

    head

    显示文件内容的头部。

    tail

    显示文件内容的尾部。

    cut

    将文件的每一行按指定分隔符分割并输出。

    split

    分割文件为不同的小片段。

    paste

    按行合并文件内容。

    sort

    对文件的文本内容排序。

    uniq

    去除重复行。oldboy

    wc

    统计文件的行数、单词数或字节数。

    iconv

    转换文件的编码格式。

    dos2unix

    将 DOS 格式文件转换成 UNIX 格式。

    diff

    全拼 difference,比较文件的差异,常用于文本文件。

    vimdiff

    命令行可视化文件比较工具,常用于文本文件。

    rev

    反向输出文件内容。

    grep/egrep

    过滤字符串,三剑客老三。

    join

    按两个文件的相同字段合并。

    tr

    替换或删除字符。

    vi/vim

    命令行文本编辑器。

    文件压缩及解压缩命令(4 个)

    tar

    打包压缩。oldboy

    unzip

    解压文件。

    gzip

    gzip 压缩工具。

    zip

    压缩工具。

    信息显示命令(11 个)

    uname

    显示操作系统相关信息的命令。

    hostname

    显示或者设置当前系统的主机名。

    dmesg

    显示开机信息,用于诊断系统故障。

    uptime

    显示系统运行时间及负载。

    stat

    显示文件或文件系统的状态。

    du

    计算磁盘空间使用情况。

    df

    报告文件系统磁盘空间的使用情况。

    top

    实时显示系统资源使用情况。

    free

    查看系统内存。

    date

    显示与设置系统时间。

    cal

    查看日历等时间信息。

    搜索文件命令(4 个)

    which

    查找二进制命令,按环境变量 PATH 路径查找。

    find

    从磁盘遍历查找文件或目录。

    whereis

    查找二进制命令,按环境变量 PATH 路径查找。

    locate

    从数据库 (/var/lib/mlocate/mlocate.db) 查找命令,使用 updatedb 更新库。

    用户管理命令(10 个)

    useradd

    添加用户。

    usermod

    修改系统已经存在的用户属性。

    userdel

    删除用户。

    groupadd

    添加用户组。

    passwd

    修改用户密码。

    chage

    修改用户密码有效期限。

    id

    查看用户的 uid,gid 及归属的用户组。

    su

    切换用户身份。

    visudo

    编辑 / etc/sudoers 文件的专属命令。

    sudo

    以另外一个用户身份(默认 root 用户)执行事先在 sudoers 文件允许的命令。

    基础网络操作命令(11 个)

    telnet

    使用 TELNET 协议远程登录。

    ssh

    使用 SSH 加密协议远程登录。

    scp

    全拼 secure copy,用于不同主机之间复制文件。

    wget

    命令行下载文件。

    ping

    测试主机之间网络的连通性。

    route

    显示和设置 linux 系统的路由表。

    ifconfig

    查看、配置、启用或禁用网络接口的命令。

    ifup

    启动网卡。

    ifdown

    关闭网卡。

    netstat

    查看网络状态。

    ss

    查看网络状态。

    深入网络操作命令(9 个)

    nmap

    网络扫描命令。

    lsof

    全名 list open files,也就是列举系统中已经被打开的文件。

    mail

    发送和接收邮件。

    mutt

    邮件管理命令。

    nslookup

    交互式查询互联网 DNS 服务器的命令。

    dig

    查找 DNS 解析过程。

    host

    查询 DNS 的命令。

    traceroute

    追踪数据传输路由状况。

    tcpdump

    命令行的抓包工具。

    有关磁盘与文件系统的命令(16 个)

    mount

    挂载文件系统。

    umount

    卸载文件系统。

    fsck

    检查并修复 Linux 文件系统。

    dd

    转换或复制文件。

    dumpe2fs

    导出 ext2/ext3/ext4 文件系统信息。

    dump

    ext2/3/4 文件系统备份工具。

    fdisk

    磁盘分区命令,适用于 2TB 以下磁盘分区。

    parted

    磁盘分区命令,没有磁盘大小限制,常用于 2TB 以下磁盘分区。

    mkfs

    格式化创建 Linux 文件系统。

    partprobe

    更新内核的硬盘分区表信息。

    e2fsck

    检查 ext2/ext3/ext4 类型文件系统。

    mkswap

    创建 Linux 交换分区。

    swapon

    启用交换分区。

    swapoff

    关闭交换分区。

    sync

    将内存缓冲区内的数据写入磁盘。

    resize2fs

    调整 ext2/ext3/ext4 文件系统大小。

    系统权限及用户授权相关命令(4 个)

    chmod

    改变文件或目录权限。

    chown

    改变文件或目录的属主和属组。

    chgrp

    更改文件用户组。

    umask

    显示或设置权限掩码。

    查看系统用户登陆信息的命令(7 个)

    whoami

    显示当前有效的用户名称,相当于执行 id -un 命令。

    who

    显示目前登录系统的用户信息。

    w

    显示已经登陆系统的用户列表,并显示用户正在执行的指令。

    last

    显示登入系统的用户。

    lastlog

    显示系统中所有用户最近一次登录信息。

    users

    显示当前登录系统的所有用户的用户列表。

    finger

    查找并显示用户信息。

    内置命令及其它(19 个)

    echo

    打印变量,或直接输出指定的字符串

    printf

    将结果格式化输出到标准输出。

    rpm

    管理 rpm 包的命令。

    yum

    自动化简单化地管理 rpm 包的命令。

    watch

    周期性的执行给定的命令,并将命令的输出以全屏方式显示。

    alias

    设置系统别名。

    unalias

    取消系统别名。

    date

    查看或设置系统时间。

    clear

    清除屏幕,简称清屏。

    history

    查看命令执行的历史纪录。

    eject

    弹出光驱。

    time

    计算命令执行时间。

    nc

    功能强大的网络工具。

    xargs

    将标准输入转换成命令行参数。

    exec

    调用并执行指令的命令。

    export

    设置或者显示环境变量。

    unset

    删除变量或函数。

    type

    用于判断另外一个命令是否是内置命令。

    bc

    命令行科学计算器

    系统管理与性能监视命令 (9 个)

    chkconfig

    管理 Linux 系统开机启动项。

    vmstat

    虚拟内存统计。

    mpstat

    显示各个可用 CPU 的状态统计。

    iostat

    统计系统 IO。

    sar

    全面地获取系统的 CPU、运行队列、磁盘 I/O、分页(交换区)、内存、 CPU 中断和网络等性能数据。

    ipcs

    用于报告 Linux 中进程间通信设施的状态,显示的信息包括消息列表、共享内存和信号量的信息。

    ipcrm

    用来删除一个或更多的消息队列、信号量集或者共享内存标识。

    strace

    用于诊断、调试 Linux 用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。

    ltrace

    命令会跟踪进程的库函数调用, 它会显现出哪个库函数被调用。

    关机 / 重启 / 注销和查看系统信息的命令(6 个)

    shutdown

    关机。

    halt

    关机。

    poweroff

    关闭电源。

    logout

    退出当前登录的 Shell。

    exit

    退出当前登录的 Shell。

    Ctrl+d

    退出当前登录的 Shell 的快捷键。

    进程管理相关命令(15 个)

    bg

    将一个在后台暂停的命令,变成继续执行 (在后台执行)。

    fg

    将后台中的命令调至前台继续运行。

    jobs

    查看当前有多少在后台运行的命令。

    kill

    终止进程。

    killall

    通过进程名终止进程。

    pkill

    通过进程名终止进程。

    crontab

    定时任务命令。

    ps

    显示进程的快照。

    pstree

    树形显示进程。

    nice/renice

    调整程序运行的优先级。

    nohup

    忽略挂起信号运行指定的命令。

    pgrep

    查找匹配条件的进程。

    runlevel

    查看系统当前运行级别。

    init

    切换运行级别。

    service

    启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态。

    展开全文
  • 使用python执行linux命令

    千次阅读 2017-08-04 11:25:44
    那么我们使用Python如何调用Linux的Shell命令?下面来介绍几种常用的方法: 1. os 模块 1.1. os模块的exec方法族 python的exec系统方法同Unix的exec系统调用是一致的。这些方法适用于在子进程中调用...

    有时候难免需要直接调用Shell命令来完成一些比较简单的操作,比如mount一个文件系统之类的。那么我们使用Python如何调用Linux的Shell命令?下面来介绍几种常用的方法:

    1. os 模块


    1.1. os模块的exec方法族

    python的exec系统方法同Unix的exec系统调用是一致的。这些方法适用于在子进程中调用外部程序的情况,因为外部程序会替换当前进程的代码,不会返回。( 这个看了点 help(os)  --> search "exec" 的相关介绍,但是没太搞明白咋使用)


    1.2. os模块的system方法

    system方法会创建子进程运行外部程序,方法只返回外部程序的运行结果。这个方法比较适用于外部程序没有输出结果的情况。

    [python] view plaincopy在CODE上查看代码片派生到我的代码片
    1. >>> import os  
    2. >>> os.system("echo \"Hello World\"")   # 直接使用os.system调用一个echo命令  
    3. Hello World         ——————> 打印命令结果  
    4. 0                   ——————> What's this ? 返回值?  
    5. >>> val = os.system("ls -al | grep \"log\" ")   # 使用val接收返回值  
    6. -rw-r--r--  1 root       root       6030829 Dec 31 15:14 log    ——————> 此时只打印了命令结果  
    7. >>> print val             
    8. 0                   ——————> 注意,此时命令正常运行时,返回值是0  
    9. >>> val = os.system("ls -al | grep \"log1\" ")  
    10. >>> print val         
    11. 256                 ——————> 使用os.system调用一个没有返回结果的命令,返回值为256~  
    12. >>>   

    注意:上面说了,此方法脂肪会外部程序的结果,也就是os.system的结果,所以如果你想接收命令的返回值,接着向下看~


    1.3. os模块的popen方法

    当需要得到外部程序的输出结果时,本方法非常有用,返回一个类文件对象,调用该对象的read()或readlines()方法可以读取输出内容。比如使用urllib调用Web API时,需要对得到的数据进行处理。os.popen(cmd) 要得到命令的输出内容,只需再调用下read()或readlines()等 如a=os.popen(cmd).read()

    [python] view plaincopy在CODE上查看代码片派生到我的代码片
    1. >>> os.popen('ls -lt')                  # 调用os.popen(cmd)并不能得到我们想要的结果  
    2. <open file 'ls -lt ', mode 'r' at 0xb7585ee8>  
    3. >>> print os.popen('ls -lt').read()     # 调用read()方法可以得到命令的结果  
    4. total 6064  
    5. -rwxr-xr-x 1 long       long            23 Jan  5 21:00 hello.sh  
    6. -rw-r--r-- 1 long       long           147 Jan  5 20:26 Makefile  
    7. drwxr-xr-x 3 long       long          4096 Jan  2 19:37 test  
    8. -rw-r--r-- 1 root       root       6030829 Dec 31 15:14 log  
    9. drwxr-xr-x 2 long       long          4096 Dec 28 09:36 pip_build_long  
    10. drwx------ 2 Debian-gdm Debian-gdm    4096 Dec 23 19:08 pulse-gylJ5EL24GU9  
    11. drwx------ 2 long       long          4096 Jan  1  1970 orbit-long  
    12. >>> val = os.popen('ls -lt').read()     # 使用变量可以接收命令返回值  
    13. >>> if "log" in val:                    # 我们可以使用in来判断返回值中有木有一个字符串  
    14. ...     print "Haha,there is the log"  
    15. ... else:  
    16. ...     print "No,not happy"  
    17. ...  
    18. Haha,there is the log  


    2. commands 模块


    使用commands模块的getoutput方法,这种方法同popend的区别在于popen返回的是一个类文件对象,而本方法将外部程序的输出结果当作字符串返回,很多情况下用起来要更方便些。
    主要方法:  

    *   commands.getstatusoutput(cmd)         返回(status, output)
    *   commands.getoutput(cmd)                   只返回输出结果
    *   commands.getstatus(file)                     返回ls -ld file的执行结果字符串,调用了getoutput,不建议使用此方法

    [python] view plaincopy在CODE上查看代码片派生到我的代码片
    1. long@zhouyl:/tmp/tests$ python  
    2. Python 2.7.3 (default, Jan  2 201316:53:07)   
    3. [GCC 4.7.2] on linux2  
    4. Type "help""copyright""credits" or "license" for more information.  
    5. >>> import commands  
    6. >>> commands.getstatusoutput('ls -lt')      # 返回(status, output)  
    7. (0'total 5900\n-rwxr-xr-x 1 long long      23 Jan  5 21:34 hello.sh\n-rw-r--r-- 1 long long     147 Jan  5 21:34 Makefile\n-rw-r--r-- 1 long long 6030829 Jan  5 21:34 log')  
    8. >>> commands.getoutput('ls -lt')            # 返回命令的输出结果(貌似和Shell命令的输出格式不同哈~)  
    9. 'total 5900\n-rwxr-xr-x 1 long long      23 Jan  5 21:34 hello.sh\n-rw-r--r-- 1 long long     147 Jan  5 21:34 Makefile\n-rw-r--r-- 1 long long 6030829 Jan  5 21:34 log'  
    10. >>> commands.getstatus('log')               # 调用commands.getoutput中的命令对'log'文件进行相同的操作  
    11. '-rw-r--r-- 1 long long 6030829 Jan  5 21:34 log'  
    12. >>>   


    3. subprocess模块


    根据Python官方文档说明,subprocess模块用于取代上面这些模块。有一个用Python实现的并行ssh工具—mssh,代码很简短,不过很有意思,它在线程中调用subprocess启动子进程来干活。
    [python] view plaincopy在CODE上查看代码片派生到我的代码片
    1. >>> from subprocess import call  
    2. >>> call(["ls""-l"])  

    subprocess与system相比的优势是它更灵活(你可以得到标准输出,标准错误,“真正”的状态代码,更好的错误处理,等..)。我认为使用os.system已过时,或即将过时。

    4. 众方法的比较以及总结

    4.1. 关于 os.system 

    os.system("some_command with args")将命令以及参数传递给你的系统shell,这很好,因为你可以用这种方法同时运行多个命令并且可以设置管道以及输入输出重定向。比如:
    os.system("some_command < input_file | another_command > output_file")
    然而,虽然这很方便,但是你需要手动处理shell字符的转义,比如空格等。此外,这也只能让你运行简单的shell命令而且不能运行外部程序。

    4.2. 关于os.popen

    使用stream = os.popen("some_command with args")也能做与os.system一样的事,与os.system不同的是os.popen会返回一个类文件对象,使用它来访问标准输入、输出。

    4.3. 关于subprocess.popen

    subprocess模块的Popen类,意图作为os.popen的替代,但是因为其很全面所以比os.popen要显得稍微复杂
    比如你可以使用  print Popen("echo Hello World", stdout=PIPE, shell=True).stdout.read()  来替代  print os.popen("echo Hello World").read()。但是相比之下它使用一个统一的类包括4中不同的popen函数还是不错的。

    4.4. 关于subprocess.call

    subprocess模块的call函数。它基本上就像Popen类并都使用相同的参数,但是它只简单的等待命令完成并给你返回代码。比如:
    return_code = subprocess.call("echo Hello World", shell=True)


    os模块中还有C中那样的fork/exec/spawn函数,但是我不建议直接使用它们。
    subprocess可能更加适合你。


    ===========================================
    [1] http://demi-panda.com/2013/01/25/python-shell-command/index.html
    [2] http://m.blog.csdn.net/blog/overstack/9295995
    [3] http://blog.csdn.net/swiftshow/article/details/7755543

    下面是对于文中所涉及的内容的python官方文档:

    [4] http://docs.python.org/library/subprocess.html#replacing-older-functions-with-the-subprocess-module       -- 关于使用subprocess 替代老的方法

    [5] http://docs.python.org/lib/os-process.html     -- os的exec方法族以及system方法

    [6] http://docs.python.org/lib/os-newstreams.html    -- os的popen方法

    [7] http://docs.python.org/lib/node528.html    -- os的subprocess介绍

    展开全文
  • python调用linux命令

    2019-10-17 11:51:38
    welcome to my blog ...python官方文档说, os.system(command)会在一个子进程中执行command, 所以没法更改当前主程序的环境变量 换句话说, os.system(command)执行command的效果相当于重新打开一个终端, ...
  • python中,运行Linux命令,运行正确获取运行结果,运行错误获取错误提示 subprocess模块—Popen command = "ping -c 1 baidu.com " back = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE,stderr=...
  • Linux系统安装Python3环境(超详细)

    万次阅读 多人点赞 2020-05-06 20:34:44
    1、默认情况下,Linux会自带安装Python,可以运行python --version命令查看,如图: 我们看到Linux中已经自带了Python2.7.5。再次运行python命令后就可以使用python命令窗口了(Ctrl+D退出python命令窗口)。 2...
  • Python3 执行Linux Bash命令

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

    万次阅读 多人点赞 2017-03-06 09:48:58
    linux终端(terminal)中执行python文件
  • linux下执行python脚本的两种方式

    万次阅读 2018-10-11 10:02:45
    1、直接使用python xxxx.py执行。其中python可以写成python的绝对路径。使用which python进行查询。 2、在文件的头部(第一行)写上#!/usr/bin/python2.7,这个地方使用python的绝对路径,就是上面用which python...
  • Linux下怎么创建python文件,以及运行

    万次阅读 多人点赞 2018-05-28 23:12:49
    第一步创建一个文件夹test第二部,打开终端进入该文件第三步,vim test.py写好程序,编辑好之后按Esc切换到命令模式,然后输入 :wq 回车就自动保存完成了,然后输入python test.py 运行程序得出结果...
  • Linuxpython项目运行步骤

    万次阅读 2015-10-07 11:59:25
    刚刚认识python,确实遇到了好多好多的坑,特意记下这些一步一步走来步进的坑与问题,以后还可以查阅。如还有坑,希望指教。 1 . pip pip 是Python的包管理工具,在新发行的版本中会默认安装 在命令行下输入 pip...
  • 如何在linux运行python程序

    万次阅读 2012-12-08 01:56:31
    要编辑一个new_pythonpython程序文件,输入如下命令: $pico new_python (注:可以用vim直接编辑.) 输入如下测试代码: #!/usr/bin/env python print 1+1 其中第一行告诉shell如何执行此文本文件,第二行是...
  • python脚本在linux运行的两种方式

    万次阅读 2018-08-22 14:41:56
    1、直接使用python xxxx.py执行。其中python可以写成python的绝对路径。使用which python进行查询。   2、在文件的头部(第一行)写上#!/usr/bin/python2.7,这个地方使用python的绝对路径,就是上面用which ...
  • Linux下执行Python脚本

    万次阅读 多人点赞 2019-07-04 23:48:33
    1.Linux Python环境 Linux系统一般集成Python,如果没有安装,可以手动安装,联网状态下可直接安装。Fedora下使用yum install,Ubuntu下使用apt-get install,前提都是root权限。安装完毕,可将Python加入环境变量...
  • Linux shell脚本执行Python脚本

    万次阅读 2017-04-17 16:18:41
    今天想做个定时器,用shell脚本执行...看了一篇博客解决了问题: 使用Python的时候最好指定地址:/usr/local/bin/python2.7 main.py以上只是我的Python命令地址,每个人不尽相同 原博客地址:http://blog.csdn.
  • PYTHON的程序在LINUX后台运行

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

    万次阅读 2016-08-15 15:44:26
    Python提供类似于C++ gdb的调试工具pdb,我们可以在Linux下使用pdb在命令行下进行Python程序的调试。 官方参考网站: Python2: https://docs.python.org/2/library/pdb.html Python3: ...
  • Linux运行Python文件

    千次阅读 2019-08-13 19:04:42
    1.进入文件目录  python 文件名.py 转载于:https://www.cnblogs.com/banml/p/10750472.html
  • linux系统会自带python,因为笔者有两个python版本,python2.7和python3.5,2的有idle,3的没有 安装如下:sudo apt-get install idle-python3.5当要运行3的版本时命令如下:idle-python3.5如何直接输入idle可能结果...
1 2 3 4 5 ... 20
收藏数 160,631
精华内容 64,252
关键字:

python运行linux命令