1. 程式人生 > 實用技巧 >python 呼叫系統命令

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則會出現錯誤。