python 呼叫系統命令
https://www.cnblogs.com/zhaijiahui/p/10361834.html
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則會出現錯誤。