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命令结果, 字符串类型

  • 相关阅读:
    uva 11294 Wedding
    uvalive 4452 The Ministers’ Major Mess
    uvalive 3211 Now Or Later
    uvalive 3713 Astronauts
    uvalive 4288 Cat Vs. Dog
    uvalive 3276 The Great Wall Game
    uva 1411 Ants
    uva 11383 Golden Tiger Claw
    uva 11419 SAM I AM
    uvalive 3415 Guardian Of Decency
  • 原文地址:https://www.cnblogs.com/520zm/p/10279785.html
Copyright © 2011-2022 走看看