subprocess
可以執行shell指令的相關子產品和函數有:
os.system
os.spawn
os.popen --廢棄
popen2.* --廢棄
commands.* --廢棄,3.x中被移除
import commands
result = commands.getoutput('cmd') #隻傳回執行的結果, 忽略傳回值.
result = commands.getstatus('cmd') #傳回ls -ld file執行的結果.
result = commands.getstatusoutput('cmd')
#用os.popen()執行指令cmd, 然後傳回兩個元素的元組(status, result). cmd執行的方式是{ cmd ; }2>&1, 這樣傳回結果裡面就會包含标準輸出和标準錯誤.
例子
>>> subprocess.getstatusoutput('pwd')
(0, '/home/ronny')
>>> subprocess.getoutput('pwd')
'/home/ronny'
>>> subprocess.getstatus('pwd')
Traceback (most recent call last):
File "", line 1, in
AttributeError: module 'subprocess' has no attribute 'getstatus'
以上執行shell指令的相關的子產品和函數的功能均在 subprocess 子產品中實作,并提供了更豐富的功能。
(1) call
執行指令,傳回狀态碼(指令正常執行傳回0,報錯則傳回1)
ret2=subprocess.call("ipconfig") #python3.5不是這樣,依然會抛出異常導緻無法對ret2指派
print(ret1) #0
print(ret2) #1
ret = subprocess.call(["ls", "-l"], shell=False) #shell為False的時候指令必須分開寫
ret = subprocess.call("ls -l", shell=True)
(2) check_call
執行指令,如果執行成功則傳回狀态碼0,否則抛異常
subprocess.check_call(["ls", "-l"])
subprocess.check_call("exit 1", shell=True)
(3) check_output
執行指令,如果執行成功則傳回執行結果,否則抛異常
subprocess.check_output(["echo", "Hello World!"])
subprocess.check_output("exit 1", shell=True)