国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

Python中的Subprocess模塊

發(fā)布時(shí)間:2021-08-02 23:36 來(lái)源:網(wǎng)絡(luò )整理 閱讀:79 作者:kuSorZ 欄目: 云計算 歡迎投稿:712375056

讓我們來(lái)看一下subprocess 有哪些不同的函數.

它也使你通過(guò)一種正確的方式管理輸入/輸出,有條理地整合python腳本中的的shell命令.

with untrusted input

Input and Output

subprocess 模塊能阻止輸出,當你不關(guān)心標準輸出的時(shí)候是非常方便的.

原文出處:https://segmentfault.com/a/1190000009176351

輸入參數應該是一個(gè)字符串,以傳遞給子進(jìn)程,如果沒(méi)有數據的話(huà)應該是None.
每一個(gè)進(jìn)程退出時(shí)都會(huì )返回一個(gè)狀態(tài)碼,你可以根據這個(gè)狀態(tài)碼寫(xiě)一些代碼。

用subprocess寫(xiě)Ping程序

我們先問(wèn)用戶(hù)地址,然后用ping請求這個(gè)地址.

Return Codes

通過(guò)subprocess.call的返回值你能夠判定命令是否執行成功.

其他參考文章,Python模塊subprocess:https://www.cnblogs.com/sunailong/p/5162748.htm

subprocess.call(['df', '-h'])

下面的例子把shell設置為T(mén)rue

我們能從Python官方文檔里讀到應該用subprocess 模塊來(lái)運行系統命令.subprocess模塊允許我們創(chuàng )建子進(jìn)程,連接他們的輸入/輸出/錯誤管道,還有獲得返回值。
subprocess.call('du -hs $HOME', shell=True)

注意,python官方文檔里對參數shell=True陳述了一個(gè)警告:

以前我一直用os.system()處理一些系統管理任務(wù),因為我認為那是運行linux命令最簡(jiǎn)單的方式.
from subprocess import Popen, PIPEp1 = Popen(["dmesg"], stdout=PIPE)print p1.communicate()Popen.communicate()

communicate()函數返回一個(gè)tuple(標準輸出和錯誤).

import subprocess p = subprocess.Popen(["echo", "hello world"], stdout=subprocess.PIPE)print p.communicate() >>>('hello world ', None)

注意,雖然你可以使用 "shell=True",但并不推薦這樣的方式.
我們來(lái)做一些真實(shí)的例子,subprocess.Popen需要一個(gè)數組作為參數:

管道表明一個(gè)新的子管道應該被創(chuàng )建.
subprocess模塊打算來(lái)替代幾個(gè)過(guò)時(shí)的模塊和函數,比如: os.system, os.spawn*, os.popen*, popen2.*命令。

Invoking the system shell with shell=True can be a security hazard if combined
如果你知道你只用幾個(gè)有限的函數,比如Popen和PIPE,你可以單單指定這幾個(gè)函數:

subprocess.popen是用來(lái)替代os.popen的.
我們用subprocess.call()來(lái)做一個(gè)統計磁盤(pán)的例子:

現在,我們來(lái)看看輸入與輸出

# Import the moduleimport subprocess# Ask the user for inputhost = raw_input("Enter a host to ping: ")     # Set up the echo command and direct the output to a pipep1 = subprocess.Popen(['ping', '-c 2', host], stdout=subprocess.PIPE)# Run the commandoutput = p1.communicate()[0] print output


Popen.communicate() 和進(jìn)程溝通:發(fā)送數據到標準輸入.從標準輸出和錯誤讀取數據直到遇到結束符.等待進(jìn)程結束.
注意,參數shell默認為False
subprocess.Popen()

subprocess 模塊中基本的進(jìn)程創(chuàng )建和管理由Popen 類(lèi)來(lái)處理.
我們可以用數組作為參數運行命令,也可以用字符串作為參數運行命令(通過(guò)設置參數shell=True)
subprocess.call()

執行由參數提供的命令.
基本上,當你用 communicate()函數的時(shí)候意味著(zhù)你要執行命令了.

標準錯誤可以指向標準輸出,表明子進(jìn)程的錯誤信息會(huì )被捕獲到和標準輸出同一個(gè)文件.

stdin, stdout and stderr

我在使用subprocess 時(shí),有一個(gè)微妙的部分是怎么使用管道把命令連接起來(lái).
默認的設置為None,意味著(zhù)沒(méi)有重定向發(fā)生

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

午夜尤物禁止18点击进入| 色AV永久无码影院AV| 亚洲中文久久精品无码浏不卡| 亚洲国产理论片在线播放| 日韩av无码中文一区二区三区| 亚洲AV无码之国产精品|