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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM