Python 使用 subprocess 調用外部命令

來源:互聯網
上載者:User

從 Python 2.4 開始,Python 引入 subprocess 模組來管理子進程,以取代一些舊模組的方法:如os.systemos.spawnos.popenpopen2.*commands.*subprocess 不但可以調用外部的命令作為子進程,而且可以串連到子進程的 input/output/error 管道,擷取相關的返回資訊。

使用 subprocess 模組

使用 Popen 類

class 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)

args 參數,指定要執行的外部程式。其值可以是字串或者序列。

shell 預設為 False。

在 Unix 下,shell=False 時, Popen 調用 os.execvp() 執行 args
指定的程式;shell=True 時,如果 args 是字串,Popen 直接調用系統的 Shell 來執行 args 指定的程式,如果
args 是一個序列,則 args 的第一項是定義程式命令字串,其它項是調用系統 Shell 時的附加參數。

在 Windows 下,不論 shell 的值如何,Popen 調用 CreateProcess() 執行 args
指定的外部程式。如果 args 是一個序列,則先用 list2cmdline() 轉化為字串,但需要注意的是,並不是 MS Windows
下所有的程式都可以用 list2cmdline 來轉化為命令列字串。

stdin、stdout、stderr 分別用於指定程式標準輸入、輸出、錯誤的 handle。其值可以為 PIPE、file descriptor、檔案對象、None。

以調用 Linux 下的 ping 命令為例:

pingPopen = subprocess.Popen(args='ping -c4 www.google.cn', shell=True)

如果要取得 ping 的輸出資訊:

pingPopen = subprocess.Popen(args='ping -c4 www.google.cn', shell=True, stdout=subprocess.PIPE)print pingPopen.stdout.read()

外部程式是在一個子進程裡執行的,如果要等待該進程的結束,可以使用 wait():

pingPopen.wait()

wait() 方法會返回一個傳回碼。

又或者在建立 Popen 對象後調用 communicate() :

stdReturn = subprocess.Popen(args='ping -c4 www.google.cn', shell=True, stdout=subprocess.PIPE,stderr=subprocess.PIPE).communicate()

communicate() 返回一個 (stdout, sterr)。

使用 call() 和 check_all()

subprocess 模組裡面有兩個方便的函數 call() 和 check_all(),可以直接調用來執行外部程式。

call(*popenargs, **kwargs)
check_call(*popenargs, **kwargs)

它們的參數列表跟 Popen 的建構函式參數列表一樣。返回一個 returncode。例如:

subprocess.call('ping -c4 www.google.cn',shel=True)
參考資料
  • http://www.python.org/doc/2.5.2/lib/module-subprocess.html
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.