python執行系統命令四種方法比較

Alin2477305449發表於2023-03-31

Python中執行系統命令常見的幾種方法有

注意:以下例項程式碼在Python3.5下執行透過。

一、os.system方法

os.system(cmd)

在子終端執行系統命令,可以獲取命令執行後的返回資訊以及執行返回的狀態

1
2
3
4
>>>  import  os
>>> os.system( 'date' )
2018年 4月 8日 星期日 19時29分13秒 CST
0   #執行狀態號,0表示正確

執行後返回兩行結果,第一行是結果, 第二行是執行狀態資訊


二、os.popen方法

os.popen(cmd)

不僅執行命令而且返回執行後的資訊物件(常用於需要獲取執行命令後的返回資訊),是透過一個管道檔案將結果返回

1
2
3
4
>>>  import  os
>>> nowtime = os.popen( 'date' )
>>> print(nowtime. read ())
2018年 4月 8日 星期日 19時30分35秒 CST


三、commands模組

方法  說明

getoutput   獲取執行命令後的返回資訊

getstatus   獲取執行命令的狀態值(執行命令成功返回數值0,否則返回非0)

getstatusoutput 獲取執行命令的狀態值以及返回資訊

1
2
3
4
>>>  import  commonds
>>> status, output = commands.getstatusoutput( 'date' )
>>> print(status)     # 0
>>> print(output)     # 2018年 4月 8日 星期日 19時31分45秒 CST

注意1:在類unix的系統下使用此方法返回的返回值(status)與指令碼或命令執行之後的返回值不等,這是因為呼叫了os.wait()的緣故,具體原因就得去了解下系統wait()的實現了。需要正確的返回值(status),只需要對返回值進行右移8位操作就可以了。

注意2:當執行命令的引數或者返回中包含了中文文字,那麼建議使用subprocess。


四、subprocess模組

運用對執行緒的控制和監控,將返回的結果賦於一變數,便於程式的處理。有豐富的引數可以進行配置,可供我們自定義的選項多,靈活性高。之前我使用os.system的時候遇到檔案描述符被子程式繼承的問題,後來透過close_fds = False 這個引數來解決的。官方檔案:

1
2
3
4
>>>  import  subprocess
>>> nowtime = subprocess.Popen( 'date' , shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
>>> print(nowtime.stdout. read ())
2018年 4月 8日 星期日 19時32分41秒 CST


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952502/viewspace-2942922/,如需轉載,請註明出處,否則將追究法律責任。

相關文章