Python supprocess模組

來源:互聯網
上載者:User

標籤:index   log   connect   ram   包含   new   padding   func   不為   

當我們需要調用系統的命令的時候,最先考慮的os模組。用os.system()和os.popen()來進行操作。但是這兩個命令過於簡單,不能完成一些複雜的操作,如給啟動並執行命令提供輸入或者讀取命令的輸出,判斷該命令的運行狀態,管理多個命令的並行等等。這時subprocess中的Popen命令就能有效完成我們需要的操作。

      subprocess模組允許一個進程建立一個新的子進程,通過管道串連到子進程的stdin/stdout/stderr,擷取子進程的傳回值等操作。 

The subprocess module allows you to spawn new processes, connect to their input/output/error pipes, and obtain their return codes.

This module intends to replace several other, older modules and functions, such as: os.system、os.spawn*、os.popen*、popen2.*、commands.*

 

這個模組一個類:Popen。

123 #Popen它的建構函式如下: subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None,stderr=None, preexec_fn=None, close_fds=False, shell=False,<br>                 cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)
 parameter簡單命令:
123456789101112131415161718 import subprocess a=subprocess.Popen(‘ls‘)#  建立一個新的進程,與主進程不同步 print(‘>>>>>>>‘,a)#a是Popen的一個執行個體對象 ‘‘‘>>>>>>> <subprocess.Popen object at 0x10185f860>__init__.py__pycache__log.pymain.py ‘‘‘ # subprocess.Popen(‘ls -l‘,shell=True) # subprocess.Popen([‘ls‘,‘-l‘])
subprocess.PIPE

在建立Popen對象時,subprocess.PIPE可以初始化stdin, stdout或stderr參數。表示與子進程通訊的標準流。

123456 import subprocess # subprocess.Popen(‘ls‘)p=subprocess.Popen(‘ls‘,stdout=subprocess.PIPE)#結果跑哪去啦? print(p.stdout.read())#這這呢:b‘__pycache__\nhello.py\nok.py\nweb\n‘

這是因為subprocess建立了子進程,結果本在子進程中,if 想要執行結果轉到主進程中,就得需要一個管道,即 : stdout=subprocess.PIPE

subprocess.STDOUT

建立Popen對象時,用於初始化stderr參數,表示將錯誤通過標準輸出資料流輸出。

Popen的方法 View Codesupprocess模組的工具函數
12345678910111213 supprocess模組提供了一些函數,方便我們用於建立進程來實現一些簡單的功能。 subprocess.call(*popenargs, **kwargs)運行命令。該函數將一直等待到子進程運行結束,並返回進程的returncode。如果子進程不需要進行交 互,就可以使用該函數來建立。 subprocess.check_call(*popenargs, **kwargs)與subprocess.call(*popenargs, **kwargs)功能一樣,只是如果子進程返回的returncode不為0的話,將觸發CalledProcessError異常。在異常對象中,包 括進程的returncode資訊。 check_output(*popenargs, **kwargs)與call()方法類似,以byte string的方式返回子進程的輸出,如果子進程的傳回值不是0,它拋出CalledProcessError異常,這個異常中的returncode包含返回碼,output屬性包含已有的輸出。 getstatusoutput(cmd)/getoutput(cmd)這兩個函數僅僅在Unix下可用,它們在shell中執行指定的命令cmd,前者返回(status, output),後者返回output。其中,這裡的output包括子進程的stdout和stderr。
 示範 互動命令:

終端輸入的命令分為兩種:

  • 輸入即可得到輸出,如:ifconfig
  • 輸入進行某環境,依賴再輸入,如:python

Python supprocess模組

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.