zoukankan      html  css  js  c++  java
  • Python中调用shell

    1 简单调用shell命令

    os.system(command)

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

    2 通过管道

    os.popen(command, mode)

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

    例如:

    写管道:

    os.popen('wc -c', 'w').write('hello world') 

    读管道:

    print os.popen("echo 'hello world' |wc -c").read()

    3 commands

    import commands
    commands.getstatusoutput(command)

    使用os.popen()函数执行command命令并返回一个元组(status, output), 分别表示:

    • command命令执行的返回状态(相当于命令行查看$?)
    • 执行结果(相当于命令行输出)

    对command的执行实际上是按照{command;} 2>&1的方式, 所以output中包含控制台输出信息或者错误信息. output中不包含尾部的换行符.

    4 subprocess

    • subprocess.call(['some_command','some_argument','another_argument_or_path'])
    • subprocess.call(command,shell=True)
    • subprocess.Popen(command, shell=True)

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

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

    最简单的方法是使用class subprocess.Popen(command, shell=True). Popen类有Popen.stdin, Popen.stdout, Popen.stderr三个有用的属性, 可以实现与子进程的通信.

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

    handle = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
    print handle.communicate()[0]

    >>> import subprocess
    >>> path = subprocess.Popen("pwd", shell=True, stdout=subprocess.PIPE)
    >>> print(path.communicate()[0])
    /proc/4469

     

    5 参考

    http://blog.sina.cn/dpool/blog/s/blog_5357c0af0100yzet.html?vt=4

    http://m.jb51.net/article/43500.htm

    http://www.mikewootc.com/wiki/sw_develop/language/python_shell.html

  • 相关阅读:
    springboot之静态资源路径配置
    window使用结束进程
    MyBatis动态sql语句归纳
    Mybatis——实体类属性名和数据库字段名不同时的解决方案
    oracle 查看被锁表 及解除锁定
    Eclipse设置软tab(用4个空格字符代替)及默认utf-8文件编码(unix)
    navicat和 plsql 连接oracle数据库 总结
    eclipse 快捷键Open Implementation 直接退出
    linux centos 安装mysql
    拦截器 过滤器 监听器 的区别
  • 原文地址:https://www.cnblogs.com/coxiseed/p/10606228.html
Copyright © 2011-2022 走看看