有時(shí)候難免需要直接調(diào)用Shell命令來完成一些比較簡(jiǎn)單的操作,比如mount一個(gè)文件系統(tǒng)之類的。那么我們使用Python如何調(diào)用Linux的Shell命令?下面來介紹幾種常用的方法:
1. os 模塊
1.1. os模塊的exec方法族
Python的exec系統(tǒng)方法同Unix的exec系統(tǒng)調(diào)用是一致的。這些方法適用于在子進(jìn)程中調(diào)用外部程序的情況,因?yàn)橥獠砍绦驎?huì)替換當(dāng)前進(jìn)程的代碼,不會(huì)返回。( 這個(gè)看了點(diǎn) help(os) --> search "exec" 的相關(guān)介紹,但是沒太搞明白咋使用)
1.2. os模塊的system方法
system方法會(huì)創(chuàng)建子進(jìn)程運(yùn)行外部程序,方法只返回外部程序的運(yùn)行結(jié)果。這個(gè)方法比較適用于外部程序沒有輸出結(jié)果的情況。
>>> import os >>> os.system("echo /"Hello World/"") # 直接使用os.system調(diào)用一個(gè)echo命令 Hello World ——————> 打印命令結(jié)果 0 ——————> What's this ? 返回值? >>> val = os.system("ls -al | grep /"log/" ") # 使用val接收返回值 -rw-r--r-- 1 root root 6030829 Dec 31 15:14 log ——————> 此時(shí)只打印了命令結(jié)果 >>> print val 0 ——————> 注意,此時(shí)命令正常運(yùn)行時(shí),返回值是0 >>> val = os.system("ls -al | grep /"log1/" ") >>> print val 256 ——————> 使用os.system調(diào)用一個(gè)沒有返回結(jié)果的命令,返回值為256~ >>>
注意:上面說了,此方法脂肪會(huì)外部程序的結(jié)果,也就是os.system的結(jié)果,所以如果你想接收命令的返回值,接著向下看~
1.3. os模塊的popen方法
當(dāng)需要得到外部程序的輸出結(jié)果時(shí),本方法非常有用。比如使用urllib調(diào)用Web API時(shí),需要對(duì)得到的數(shù)據(jù)進(jìn)行處理。os.popen(cmd) 要得到命令的輸出內(nèi)容,只需再調(diào)用下read()或readlines()等 如a=os.popen(cmd).read()
>>> os.popen('ls -lt') # 調(diào)用os.popen(cmd)并不能得到我們想要的結(jié)果 <open file 'ls -lt ', mode 'r' at 0xb7585ee8> >>> print os.popen('ls -lt').read() # 調(diào)用read()方法可以得到命令的結(jié)果 total 6064 -rwxr-xr-x 1 long long 23 Jan 5 21:00 hello.sh -rw-r--r-- 1 long long 147 Jan 5 20:26 Makefile drwxr-xr-x 3 long long 4096 Jan 2 19:37 test -rw-r--r-- 1 root root 6030829 Dec 31 15:14 log drwxr-xr-x 2 long long 4096 Dec 28 09:36 pip_build_long drwx------ 2 Debian-gdm Debian-gdm 4096 Dec 23 19:08 pulse-gylJ5EL24GU9 drwx------ 2 long long 4096 Jan 1 1970 orbit-long >>> val = os.popen('ls -lt').read() # 使用變量可以接收命令返回值 >>> if "log" in val: # 我們可以使用in來判斷返回值中有木有一個(gè)字符串 ... print "Haha,there is the log" ... else: ... print "No,not happy" ... Haha,there is the log
2. commands 模塊
使用commands模塊的getoutput方法,這種方法同popend的區(qū)別在于popen返回的是一個(gè)文件句柄,而本方法將外部程序的輸出結(jié)果當(dāng)作字符串返回,很多情況下用起來要更方便些。
新聞熱點(diǎn)
疑難解答
圖片精選