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