Python怎么調(diào)用系統(tǒng)命令
Python經(jīng)常被稱作“膠水語言”,因?yàn)樗軌蜉p易地操作其他程序,輕易地包裝使用其他語言編寫的庫。在Python/wxPython環(huán)境下,執(zhí)行外部命令或者說在Python程序中啟動另一個程序的方法,下面就讓學(xué)習(xí)啦小編教大家Python怎么調(diào)用系統(tǒng)命令。
Python調(diào)用系統(tǒng)命令的方法
1、os.system(command)
os.system()函數(shù)用來運(yùn)行shell命令。此命令可以方便的調(diào)用或執(zhí)行其他腳本和命令
#打開指定的文件 >>>os.system('notepad *.txt')
這個調(diào)用相當(dāng)直接,且是同步進(jìn)行的,程序需要阻塞并等待返回。返回值是依賴于系統(tǒng)的,直接返回系統(tǒng)的調(diào)用返回值,所以windows和Linux是不一樣的。
2、wx.Execute(command, syn=wx.EXEC_ASYNC, callback=None)
若置syn為wx.EXEC_ASYNC則wx.Excute函數(shù)立即返回,若syn=wx.EXEC_SYNC則等待調(diào)用的程序結(jié)束后再返回。
callback是一個wx.Process變量,如果callback不為None且syn=wx.EXEC_ASYNC,則程序結(jié)束后將調(diào)用wx.Process.OnTerminate()函數(shù)。
os.system()和wx.Execute()都利用系統(tǒng)的shell,執(zhí)行時會出現(xiàn)shell窗口。如在Windows下會彈出控制臺窗口,不美觀。下面的兩種方法則沒有這個缺點(diǎn)。
3、import subprocess
subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)
subprocess.call(["cmd", "arg1", "arg2"],shell=True)
Note:
1. 參數(shù)args可以是字符串或者序列類型(如:list,元組),用于指定進(jìn)程的可執(zhí)行文件及其參數(shù)。
2. 如果command(args)不是一個可執(zhí)行文件,shell=True不可省。否則如copy\del命令可能會出現(xiàn)FileNotFoundError錯誤。
3. Popen.wait()可以得到命令的返回值
4. 如果是windows下的命令,則文件路徑如果用的是linux格式會報錯:The syntax of the command is incorrect.
舉個栗子
if subprocess.Popen('dir /b %s' % filename, shell=True).wait() == 0
如果filename字符串中有空格,則會出現(xiàn)錯誤:File Not Found錯誤
可以通過下面["cmd", "arg1", "arg2"]兩種方式
if subprocess.Popen(["dir", "/b", filename], shell=True).wait() == 0
if subprocess.call(["dir", "/b", filename], shell=True) == 0
[Python中subprocess學(xué)習(xí)]
4、webbrowser.open(url)
前面三個方法只能用于執(zhí)行程序和打開文件,不能處理URL,打開URL地址可用webbrowser模塊提供的功能。
調(diào)用系統(tǒng)缺省瀏覽器打開URL地址,如 webbrowser.open('http://www.jb51.NET'),也可以利用
webbrowser.open('h:\python.zip')來執(zhí)行程序。這樣可以不必區(qū)分是文件名還是URL,不知道在Linux下是否可行。
以上在Windows2000,Python2.4a1,wxPython 2.5.1運(yùn)行。
[python調(diào)用shell的方法]
5. os.popen(command[,mode[,bufsize]])
舉個栗子
>>> import os
>>> p = os.popen("dir c:", 'r')
>>> p.read()
bla bla... <這里是dir正確的輸出>
>>> p.close()
>>> p = os.popen("dir d:", 'r') # 電腦中沒有D盤
>>> p.read()
''
>>> p.close()
1
>>>
可以看出,popen方法通過p.read()獲取終端輸出,而且popen需要關(guān)閉close().當(dāng)執(zhí)行成功時,close()不返回任何值,失敗時,close()返回系統(tǒng)返回值. 可見它獲取返回值的方式和os.system不同。
6. 使用commands模塊
舉個栗子
>>> import commands
>>> commands.getstatusoutput('ls /bin/ls')
(0, '/bin/ls')
>>> commands.getstatusoutput('cat /bin/junk')
(256, 'cat: /bin/junk: No such file or directory')
>>> commands.getstatusoutput('/bin/junk')
(256, 'sh: /bin/junk: not found')
>>> commands.getoutput('ls /bin/ls')
'/bin/ls'
>>> commands.getstatus('/bin/ls')
'-rwxr-xr-x 1 root 13352 Oct 14 1994 /bin/ls'
根據(jù)你需要的不同,commands模塊有三個方法可供選擇。getstatusoutput, getoutput, getstatus。
Python怎么調(diào)用系統(tǒng)命令相關(guān)文章: