在python中使用subprocess呼叫子程序

2021-09-24 21:29:07 字數 2346 閱讀 8954

本博文整理自博友文章

例子都在ubuntu 18.04上使用python3.6進行測試。

版本上的說明:python2.4之後有subprocess包,python3.5之後官方建議使用subprocess.run()

1. 不捕捉輸出(這種可以用在只執行操作,不需要結果的情況,如建立軟連線)

函式:subprocess.run(args, *, stdin=none, input=none, stdout=none, stderr=none, shell=false, timeout=none, check=false, universal_newlines=false)

>>> subprocess.run("ls -l", shell=true) # doesn't capture output

total 4

drwxr-xr-x  2 chenpan lobeseg 4096 5月  26 16:14 doc

-rw-r--r--  1 chenpan lobeseg  483 6月  25 10:27 init.sh

-rw-r--r--  1 chenpan lobeseg 1070 5月  26 16:14 license.txt

completedprocess(args=['ls', '-l'], returncode=0)

>>> subprocess.run(["ls", "-l"]) # doesn't capture output

total 4

drwxr-xr-x  2 chenpan lobeseg 4096 5月  26 16:14 doc

-rw-r--r--  1 chenpan lobeseg  483 6月  25 10:27 init.sh

-rw-r--r--  1 chenpan lobeseg 1070 5月  26 16:14 license.txt

completedprocess(args='ls -l', returncode=0)

2. 捕捉輸出,以下給出三種實現

subprocess.getoutput(cmd)

例子:>>> ret = subprocess.getoutput('ls -l')

>>> print(ret)

total 4

drwxr-xr-x  2 chenpan lobeseg 4096 5月  26 16:14 doc

-rw-r--r--  1 chenpan lobeseg  483 6月  25 10:27 init.sh

-rw-r--r--  1 chenpan lobeseg 1070 5月  26 16:14 license.txt

subprocess.getstatusoutput(cmd)

例子:>>> retcode, output = subprocess.getstatusoutput('ls -l')

>>> print(retcode)

>>> print(output)

total 4

drwxr-xr-x  2 chenpan lobeseg 4096 5月  26 16:14 doc

-rw-r--r--  1 chenpan lobeseg  483 6月  25 10:27 init.sh

-rw-r--r--  1 chenpan lobeseg 1070 5月  26 16:14 license.txt

class subprocess.popen(args, bufsize=-1, executable=none, stdin=none, stdout=none, stderr=none,

preexec_fn=none, close_fds=true, shell=false, cwd=none, env=none, universal_newlines=false,

startup_info=none, creationflags=0, restore_signals=true, start_new_session=false, pass_fds=())

例子:>>> import subprocess

>>> p = subprocess.popen('ls -l', stdout=subprocess.pipe, shell=true)

>>> print(p.stdout.read())

b'total 4\ndrwxr-xr-x  2 chenpan lobeseg 4096 5\xe6\x9c\x88  26 16:14 doc\n-rw-r--r--  1 chenpan lobeseg  483 6\xe6\x9c\x88  25 10:27 init.sh\n-rw-r--r--  1 chenpan lobeseg 1070 5\xe6\x9c\x88  26 16:14 license.txt\n'

在python中使用websocket

介紹一款很帥的外掛程式autobahnpython,通過它可以在python中很方便的使用websocket進行通訊 基於twisted框架 這個外掛程式真正強大的地方是它提供了乙個 發布 訂閱模式,具體內容有空再寫,先簡單介紹一下如何建立傳統的連線。建立伺服器 必須的模組 from twisted...

在Python中使用 slots

這篇文章主要介紹了在python中使用 slots 方法的詳細教程,slots 方法是python的乙個重要內建類方法,基於python2.x版本,需要的朋友可以參考下 正常情況下,當我們定義了乙個class,建立了乙個class的例項後,我們可以給該例項繫結任何屬性和方法,這就是動態語言的靈活性。...

with語句在Python中使用

引言 with語句生於python2.5,通過 from future import with statement 匯入後使用 2.6以後無需匯入直接使用 with 語句適用於對資源進行訪問的場合,確保不管使用過程中是否發生異常都會執行必要的 清理 操作,釋放資源 用途 最常用的兩個地方,檔案使用後...