zoukankan      html  css  js  c++  java
  • Python调用Linux bash命令

    import subprocess as sup  # 以下注释很多(为了自己以后不忘), 如果只是想在python中执行Linux命令, 看前5行就够了

    # 3.5版本之后官方推荐使用sup.run()

    sup.run("ls -l", shell=True)  # 如果参数args是字符串, shell要设置为True

    sup.run(("ls", "-l"))  # 推荐args为一个序列, list/tuple, 元组效率高

    # 命令有返回值, 字符串类型(下同)

    # sup.run(), call()等方法都是基于sup.Popen类的封装, run()如果不够用可以自己定义此类

    pp = Popen(("ls", "-l"), stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding="utf-8")  # 不输出到控制台

    p2 = subprocess.Popen(['grep', 'data'], stdin=pp.stdout, stdout=subprocess.PIPE)  # 可以将上一个命令的输出作为下一个命令的输入, 不需要|(管道符)

    try:
      pp.wait(timeout=1)   #  等待1秒, 如果子进程没结束会报错(pp类是新开一个进程, 并在子进程中执行bash命令)

      pp.kill()  # 命令执行结束杀死子进程

      # 有些阻塞的命令不要设置超时时间更不要杀死, 比如: 命令行python, 但是这样的命令不用的时候, 还是要杀掉子进程

    except:

      pass

    print(pp.stdout.read())  # 输出命令查询结果
    # 着重说一下 pp.communicate()  # 另一种输出结果的方式, 还可以再传入命令input参数, 也可以再设置超时时间timeout

    out, err = pp.communicate()  # 如果是像python这样的阻塞命令, 可以用input="print(1)", 再执行python代码

    print(out)  # 输出bash命令结果, 字符串类型

  • 相关阅读:
    linux 内核升级
    maven 热部署至tomcat
    Executor多线程框架使用
    数据库中的一些连接
    Ajax传统操作
    第三篇、简单的图片下载器
    第二篇、通过蓝牙连接外设
    第一篇、实现上拉和下拉刷新
    解决Git报错:The current branch is not configured for pull No value for key branch.master.merge found in configuration
    Spark核心概念
  • 原文地址:https://www.cnblogs.com/520zm/p/10279785.html
Copyright © 2011-2022 走看看