歡迎您光臨本站 註冊首頁

python中shell執行知識點

←手機掃碼閱讀     lousu-xi @ 2020-05-06 , reply:0

os.system
system方法會創建子進程運行外部程序,方法只返回外部程序的運行結果。這個方法比較適用於外部程序沒有輸出結果的情況。
import os os.system('ls')
commands.getstatusoutput
使用commands模塊的getoutput方法,這種方法同popend的區別在於popen返回的是一個文件句柄,而本方法將外部程序的輸出結果當作字符串返回,很多情況下用起來要更方便些。
主要方法:
commands.getstatusoutput(cmd) 返回(status, output)
commands.getoutput(cmd) 只返回輸出結果
commands.getstatus(file) 返回ls -ld file的執行結果字符串,調用了getoutput,不建議使用此方法
當需要得到外部程序的輸出結果時,本方法非常有用。比如使用urllib調用Web API時,需要對得到的數據進行處理。os.popen(cmd) 要得到命令的輸出內容,只需再調用下read()或readlines()等 如a=os.popen(cmd).read()
import os ls = os.popen('ls') print ls.read()
commands.getstatusoutput
使用commands模塊的getoutput方法,這種方法同popend的區別在於popen返回的是一個文件句柄,而本方法將外部程序的輸出結果當作字符串返回,很多情況下用起來要更方便些。
主要方法:
commands.getstatusoutput(cmd) 返回(status, output)
commands.getoutput(cmd) 只返回輸出結果
commands.getstatus(file) 返回ls -ld file的執行結果字符串,調用了getoutput,不建議使用此方法
import commands commands.getstatusoutput('ls -lt') # 返回(status, output)
subprocess.call
根據Python官方文檔說明,subprocess模塊用於取代上面這些模塊。有一個用Python實現的並行ssh工具―mssh,代碼很簡短,不過很有意思,它在線程中調用subprocess啟動子進程來幹活。
from subprocess import call call(["ls", "-l"])
import shlex, subprocess 

def shell_command(cmd, timeout) : 

data = {"rc":False, "timeout":False, "stdout":"", "stderr":""} 

try :

 process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) try: outs, errs = process.communicate(timeout=timeout) data["stdout"] = outs.decode("utf-8") data["stderr"] = errs.decode("utf-8") data["rc"] = True except subprocess.TimeoutExpired : process.kill() outs, errs = process.communicate() data["rc"] = False data["stdout"] = outs.decode("utf-8") data["stderr"] = "timeout" data["timeout"] = True except Exception as e : data["rc"] = False data["stderr"] = e finally : return data


[lousu-xi ] python中shell執行知識點已經有251次圍觀

http://coctec.com/docs/python/shhow-post-233061.html