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


 

(1) os.system

 

# 僅僅在一個子終端運行系統命令,而不能獲取命令執行后的返回信息   

# 如果再命令行下執行,結果直接打印出來  

例如:

 

>>> import os   

>>> os.system('ls')   

輸出結果:

chk_err_log.py CmdTool.log  install_log.txt  install_zabbix.sh  manage_deploy.sh  MegaSAS.log

 

 

(2) os.popen

 

#該方法不但執行命令還返回執行后的信息對象   

#好處在於:將返回的結果賦於一變量,便於程序的處理。 

例如:

 

>>> import os   

>>>tmp = os.popen('ls *.sh').readlines()

>>>tmp

 

輸出結果:

['install_zabbix.sh\n', 'manage_deploy.sh\n', 'mysql_setup.sh\n', 'python_manage_deploy.sh\n', 'setup.sh\n']

 

 

(3) 使用模塊subprocess

 

Subprocess是一個功能強大的子進程管理模塊,是替換os.system ,os.spawn* 等方法的一個模塊。

 

使用方法:

 

>>> import subprocess   

>>> subprocess.call (["cmd", "arg1", "arg2"],shell=True)  

 

好處在於:運用對線程的控制和監控,將返回的結果賦於一變量,便於程序的處理。

 

如獲取返回和輸出:

 

import subprocess

p = subprocess.Popen('ls *.sh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)   

print p.stdout.readlines()   

for line in p.stdout.readlines():   

    print line,   

retval = p.wait()

 

 

 

 

(4) 使用模塊commands模塊

 

方法                       說明

getoutput               獲取執行命令后的返回信息

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

getstatusoutput     獲取執行命令的狀態值以及返回信息

 

 

>>> import commands

>>> commands.getoutput('ls *.sh')

輸出結果:

'install_zabbix.sh\nmanage_deploy.sh\nmysql_setup.sh\npython_manage_deploy.sh\nsetup.sh'

 

>>> commands.getstatusoutput('ls *.sh')

輸出結果:

(0, 'install_zabbix.sh\nmanage_deploy.sh\nmysql_setup.sh\npython_manage_deploy.sh\nsetup.sh')

 

import commands

(status, output) = commands.getstatusoutput('cat /proc/cpuinfo')

print status,output

 

 

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

 

注意2:當執行命令的參數或者返回中包含了中文文字,那么建議使用subprocess,如果使用os.popen則會出現錯誤。

 


免責聲明!

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



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