python呼叫shell命令

2021-09-22 20:10:43 字數 2665 閱讀 9340

在python程式中呼叫shell命令

此函式會啟動子程序,在子程序中執行command,並返回command命令執行完畢後的退出狀態,如果command有執行內容,會在標準輸出顯示。這實際上是使用c標準庫函式system()實現的。

缺點:這個函式在執行command命令時需要重新開啟乙個終端,並且無法儲存command命令的執行結果。

system方法會建立子程序執行外部程式,方法只返回外部程式的執行結果。這個方法比較適用於外部程式沒有輸出結果的情況。

import os 

os.system("echo \"hello world\"") # 直接使用os.system呼叫乙個echo命令

hello world ——————> 列印命令結果

0 ——————> what's this ? 返回值?

>>> val = os.system("ls -al | grep \"log\" ") # 使用val接收返回值

-rw-r--r-- 1 root root 6030829 dec 31 15:14 log ——————> 此時只列印了命令結果

>>> print val

0 ——————> 注意,此時命令正常執行時,返回值是0

>>> val = os.system("ls -al | grep \"log1\" ")

>>> print val

256 ——————> 使用os.system呼叫乙個沒有返回結果的命令,返回值為256~

例項:os.system(『ls -l *』)

開啟乙個與command程序之間的管道。這個函式的返回值是乙個檔案物件,可以讀或者寫(由mode決定,mode預設是』r』)。如果mode為』r』,可以使用此函式的返回值呼叫read()來獲取command命令的執行結果。

os.system(cmd)或os.popen(cmd),前者返回值是指令碼的退出狀態碼,後者的返回值是指令碼執行過程中的輸出內容。實際使用時視需求情況而選擇。

>>> os.popen('ls -lt')         # 呼叫os.popen(cmd)並不能得到我們想要的結果 

>>> print os.popen('ls -lt').read() # 呼叫read()方法可以得到命令的結果

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來判斷返回值中有木有乙個字串

... print "haha,there is the log"

... else:

...

haha,there is the log

例項:tmp = os.popen(『ls -l *』).readlines()

使用os.popen()函式執行command命令並返回乙個元組(status,output),分別表示command命令執行的返回狀態和執行結果。對command的執行實際上是按照 2>&1的方式,所以output中包含控制台輸出資訊或者錯誤資訊。output中不包含尾部的換行符。

使用commands模組的getoutput方法,這種方法同popend的區別在於popen返回的是乙個類檔案物件,而本方法將外部程式的輸出結果當作字串返回,很多情況下用起來要更方便些。

args="ls -l"

p=subprocess.popen(args,shell=true)

subprocess與system相比的優勢是它更靈活(你可以得到標準輸出,標準錯誤,「真正」的狀態**,更好的錯誤處理,等…)。其中的call()完全替代了system(),而popen()被更為豐富的popen類替代;

subprocess.run()、subprocess.call()、subprocess.check_call()、subprocess.check_output()都是通過對subprocess.popen的封裝來實現的高階函式,因此如果我們需要更複雜功能時,可以通過subprocess.popen來完成。run預設不會返回輸出,只返回命令和執行狀態。

python之系統互動(subprocess)

舉例講解linux系統下python呼叫系統shell的方法

python 呼叫shell命令

python中的commands模組用於呼叫shell命令,有3中方法 commands.getstatus 返回執行狀態 commands.getoutput 返回執行結果 commands.getstatusoutput 返回乙個元組,執行狀態和執行結果 其他執行shell命令的方法還有 1.o...

python 呼叫 shell 命令方法

python呼叫shell命令方法 缺點 不能獲取返回值 要得到命令的輸出內容,只需再呼叫下read 或readlines 等 例 a os.popen cmd read 此模組主要有如下方法 commands.getstatusoutput cmd 返回 status,output command...

python 呼叫shell命令的方法

在python程式中呼叫shell命令,是件很酷且常用的事情 1.os.system command 此函式會啟動子程序,在子程序中執行command,並返回command命令執行完畢後的退出狀態,如果command有執行內容,會在標準輸出顯示。這實際上是使用c標準庫函式system 實現的。缺點 ...