首頁 後端開發 Python教學 利用python執行shell腳本 並動態傳參 及subprocess基本使用

利用python執行shell腳本 並動態傳參 及subprocess基本使用

Apr 26, 2018 pm 02:47 PM
python shell 腳本

這篇文章跟大家分享了利用python執行shell腳本並動態傳​​參 及subprocess基本使用,有感興趣的小伙伴可以看一看

最近工作需求中有遇到這個情況 在web端取得設定檔內容及往shell 腳本中動態傳入參數

執行shell腳本這個有多種方法  最後還是選擇了subprocess這個python標準函式庫

 subprocess這個模組可以非常方便的啟動子程序,並且控制其輸入和輸出

Class Popen(args,bufsize = 0,executable=None,
            stdin =None,stdout =None,stderr =None,#¥  stdin =None,st = None,close_fds = False,shell = False,
            cwd = None,env = None,universal_newlines = False,
          一個字串,或一系列程式參數。要執行的程式通常是args序列或字串中的第一項,但可以使用可執行參數進行明確設定。
在UNIX上,與shell=False(預設):在這種情況下,POPEN 類別使用os.execvp()來執行子程式。 args通常應該是一個序列。一個字串將被視為一個字串作為唯一項目(要執行的程式)的序列。


在UNIX上,使用shell = True:如果args是字串,則它指定要透過shell執行的命令字串。如果args是一個序列,則第一個項目指定命令字串,並且任何其他項目將被視為附加的shell參數。

可以先建立一個簡單的shell腳本 a.sh

$1 $2 分別代表傳進腳本的第一個和第二個參數

如果不寫shell=True,預設為shell=False,需要在args的第一個參數指定執行器路徑


##bufsize  如果給出,bufsize與內建的open()函數的對應參數具有相同的意義:0表示無緩衝,1表示行緩衝,任何其他正值意味著使用(大約)該大小的緩衝區。負bufsize意味著使用系統預設值,通常意味著完全緩衝。 bufsize的預設值是0(無緩衝)。


stdin,stdout和stderr分別指定執行的程式的標準輸入,標準輸出和標準錯誤檔案句柄。有效值是PIPE,現有文件描述符(正整數),現有文件物件和 None。 PIPE表示應該創建一個新的管道給孩子。隨著無,則不會發生重定向; 孩子的檔案句柄將從父類別繼承。另外,stderr 可以是STDOUT,它表示應用程式的stderr資料應該被捕獲到與stdout相同的檔案句柄中。



在Popen物件中,可以設值subprocess.stdout=PIPE 即透過管道p.stdout.read()取出該進程的標準輸出

#preexec_fn 如果將preexec_fn設定為可呼叫對象,則該物件將在子程序執行前被呼叫。

如果close_fds為true,則在執行子程序之前,將關閉除0,1和2之外的所有檔案描述符。


如果shell為true,則指定的指令將透過shell執行。


如果cwd不是None,那麼在執行子代之前,目前目錄將變更為cwd。


如果env不是None,它將為新進程定義環境變數。


如果設定universal_newlines為true,則檔案物件stdout和stderr將作為文字檔案打開,但可能會有\ n,Unix行尾約定\ r,Macintosh約定或\ r \ n中的任何行終止, Windows約定。所有這些外部表示被Python程式視為\ n。注意:此功能僅在Python是使用通用換行支援(預設)建置時才可用。此外,檔案物件stdout,stdin和stderr的newlines屬性不會被communications()方法更新。




如果設定了STARTUPINFO和creationflags,將會傳遞到下層的CreateProcess()函數。他們可以指定諸如主視窗的外觀和新過程的優先順序等內容。 (僅限Windows)

Popen物件的一些方法


Popen.poll()  檢查子程序是否終止,傳回物件的returncode

#Popen.wait() 等待子程序完成,阻塞。返回returncode

Popen.communicate(input=None) 將資訊輸入到進程,從stdout和stderr讀取數據,直到達到檔案結尾。等待進程終止。可選的stdin參數應該是要傳送到子進程的字串,如果沒有資料應傳送給子進程,則為None。

傳回一個元組(stdout,stderr) 但是讀取的資料快取在記憶體中,所以如果資料量很大或無限,就不要用這個方法

Popen.pid 回子程序的pid

Popen.returncode 讀取程序的狀態碼   None -子程序尚未結束;
                                       ==0而言──子流程正常退出;
> 0— 子程序異常退出,returncode對應於出錯碼;

##                                      < 0── 子程序被訊號殺死了。

Popen.kill() 殺死進程

相關推薦:

#基於Python Shell取得hostname和fqdn釋疑


########################### ##bpython 功能強大的Python shell###############

以上是利用python執行shell腳本 並動態傳參 及subprocess基本使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

mysql 是否要付費 mysql 是否要付費 Apr 08, 2025 pm 05:36 PM

MySQL 有免費的社區版和收費的企業版。社區版可免費使用和修改,但支持有限,適合穩定性要求不高、技術能力強的應用。企業版提供全面商業支持,適合需要穩定可靠、高性能數據庫且願意為支持買單的應用。選擇版本時考慮的因素包括應用關鍵性、預算和技術技能。沒有完美的選項,只有最合適的方案,需根據具體情況謹慎選擇。

HadiDB:Python 中的輕量級、可水平擴展的數據庫 HadiDB:Python 中的輕量級、可水平擴展的數據庫 Apr 08, 2025 pm 06:12 PM

HadiDB:輕量級、高水平可擴展的Python數據庫HadiDB(hadidb)是一個用Python編寫的輕量級數據庫,具備高度水平的可擴展性。安裝HadiDB使用pip安裝:pipinstallhadidb用戶管理創建用戶:createuser()方法創建一個新用戶。 authentication()方法驗證用戶身份。 fromhadidb.operationimportuseruser_obj=user("admin","admin")user_obj.

Navicat查看MongoDB數據庫密碼的方法 Navicat查看MongoDB數據庫密碼的方法 Apr 08, 2025 pm 09:39 PM

直接通過 Navicat 查看 MongoDB 密碼是不可能的,因為它以哈希值形式存儲。取回丟失密碼的方法:1. 重置密碼;2. 檢查配置文件(可能包含哈希值);3. 檢查代碼(可能硬編碼密碼)。

mysql 需要互聯網嗎 mysql 需要互聯網嗎 Apr 08, 2025 pm 02:18 PM

MySQL 可在無需網絡連接的情況下運行,進行基本的數據存儲和管理。但是,對於與其他系統交互、遠程訪問或使用高級功能(如復制和集群)的情況,則需要網絡連接。此外,安全措施(如防火牆)、性能優化(選擇合適的網絡連接)和數據備份對於連接到互聯網的 MySQL 數據庫至關重要。

mysql 無法連接到本地主機怎麼解決 mysql 無法連接到本地主機怎麼解決 Apr 08, 2025 pm 02:24 PM

無法連接 MySQL 可能是由於以下原因:MySQL 服務未啟動、防火牆攔截連接、端口號錯誤、用戶名或密碼錯誤、my.cnf 中的監聽地址配置不當等。排查步驟包括:1. 檢查 MySQL 服務是否正在運行;2. 調整防火牆設置以允許 MySQL 監聽 3306 端口;3. 確認端口號與實際端口號一致;4. 檢查用戶名和密碼是否正確;5. 確保 my.cnf 中的 bind-address 設置正確。

mysql workbench 可以連接到 mariadb 嗎 mysql workbench 可以連接到 mariadb 嗎 Apr 08, 2025 pm 02:33 PM

MySQL Workbench 可以連接 MariaDB,前提是配置正確。首先選擇 "MariaDB" 作為連接器類型。在連接配置中,正確設置 HOST、PORT、USER、PASSWORD 和 DATABASE。測試連接時,檢查 MariaDB 服務是否啟動,用戶名和密碼是否正確,端口號是否正確,防火牆是否允許連接,以及數據庫是否存在。高級用法中,使用連接池技術優化性能。常見錯誤包括權限不足、網絡連接問題等,調試錯誤時仔細分析錯誤信息和使用調試工具。優化網絡配置可以提升性能

如何針對高負載應用程序優化 MySQL 性能? 如何針對高負載應用程序優化 MySQL 性能? Apr 08, 2025 pm 06:03 PM

MySQL數據庫性能優化指南在資源密集型應用中,MySQL數據庫扮演著至關重要的角色,負責管理海量事務。然而,隨著應用規模的擴大,數據庫性能瓶頸往往成為製約因素。本文將探討一系列行之有效的MySQL性能優化策略,確保您的應用在高負載下依然保持高效響應。我們將結合實際案例,深入講解索引、查詢優化、數據庫設計以及緩存等關鍵技術。 1.數據庫架構設計優化合理的數據庫架構是MySQL性能優化的基石。以下是一些核心原則:選擇合適的數據類型選擇最小的、符合需求的數據類型,既能節省存儲空間,又能提升數據處理速度

如何將 AWS Glue 爬網程序與 Amazon Athena 結合使用 如何將 AWS Glue 爬網程序與 Amazon Athena 結合使用 Apr 09, 2025 pm 03:09 PM

作為數據專業人員,您需要處理來自各種來源的大量數據。這可能會給數據管理和分析帶來挑戰。幸運的是,兩項 AWS 服務可以提供幫助:AWS Glue 和 Amazon Athena。

See all articles