import osos.system('dir')dir產生的屏顯將直接出現在當前的屏幕上。
返回值和執行環境有關。如果是windows的cmd.exe環境,返回值是狀態碼。0代表成功,1代表失敗。比如,如果不小心敲錯了,把dir寫成了ddir,那么由于找不到這條命令,返回碼會是1。
import subprocesssubprocess.call('dir',shell=True)效果同上。
因為dir是cmd.exe的內置命令,所以需指出shell=True,強調這條命令要被放在shell(cmd.exe)中執行的。如果這個參數缺失,dir會被當做一般的可執行文件直接調用,由于找不到名為dir的可執行文件,會報錯。
import subprocesssubprocess.Popen('dir',shell=True)這個和上一條基本是等價的。不同之處在于,call返回的是狀態碼,而Popen返回的是一個進程對象,這個對象可以有更高級的用途,下面將說到。
如果想檢查一下執行過程中的屏顯,而不是直接拋給用戶,那就涉及到Popen的高級用途了
from subprocess import Popen, PipEp = Popen("dir", shell=True, stdout=PIPE)output = p.stdout.read() #捕獲屏顯,而不是直接顯示給用戶print output這里PIPE就是一個常量,等于-1。將其賦給參數stdout有一個特殊的含義,那就是將執行所產生的屏顯重新定向到Popen.stdout。
Popen.stdout是一個管道對象,可以通過read、readline等方法讀取管道的內容。
如果調用程序之后還需要進行輸入輸出的交互,那么就要用到communicate函數。
下面的代碼先打開一個cmd.exe進程,然后在其中執行dir命令,然后捕獲輸出。
from subprocess import Popen, PIPEp = Popen("cmd.exe", stdin=PIPE, stdout=PIPE, stderr=PIPE) #打開一個cmd.exeoutput,err = p.communicate('dir/n') #輸入dir命令,同時捕獲輸出print outputprint errcommunicate接收一個參數,作為輸入。返回兩個值,分別是stdout和stderr的內容。
新聞熱點
疑難解答