最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python subprocess模塊詳細解讀

 更新時間:2018年01月29日 15:49:54   作者:世界看我我看世界  
這篇文章主要介紹了Python subprocess模塊詳細解讀,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下

本文研究的主要是Python subprocess模塊的相關內容,具體如下。

在學習這個模塊前,我們先用Python的help()函數(shù)查看一下subprocess模塊是干嘛的:

DESCRIPTION
This module allows you to spawn processes, connect to their
input/output/error pipes, and obtain their return codes.

即允許你去創(chuàng)建一個新的進程讓其執(zhí)行另外的程序,并與它進行通信,獲取標準的輸入、標準輸出、標準錯誤以及返回碼等。
注意:使用這個模塊之前要先引入該模塊。

Popen類

subprocess模塊中定義了一個Popen類,通過它可以來創(chuàng)建進程,并與其進行復雜的交互。查看一下它的構造函數(shù):

__init__(self, 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)

主要參數(shù)說明:

args:args should be a string, or a sequence of program arguments.也就是說必須是一個字符串或者序列類型(如:字符串、list、元組),用于指定進程的可執(zhí)行文件及其參數(shù)。如果是一個序列類型參數(shù),則序列的第一個元素通常都必須是一個可執(zhí)行文件的路徑。當然也可以使用executeable參數(shù)來指定可執(zhí)行文件的路徑。

stdin,stdout,stderr:分別表示程序的標準輸入、標準輸出、標準錯誤。有效的值可以是PIPE,存在的文件描述符,存在的文件對象或None,如果為None需從父進程繼承過來,stdout可以是PIPE,表示對子進程創(chuàng)建一個管道,stderr可以是STDOUT,表示標準錯誤數(shù)據(jù)應該從應用程序中捕獲并作為標準輸出流stdout的文件句柄。

shell:如果這個參數(shù)被設置為True,程序將通過shell來執(zhí)行。

env:它描述的是子進程的環(huán)境變量。如果為None,子進程的環(huán)境變量將從父進程繼承而來。

創(chuàng)建Popen類的實例對象

res = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

cmd:標準像子進程傳入需要執(zhí)行的shell命令,如:ls -al

subprocess.PIPE:在創(chuàng)建Popen對象時,subprocess.PIPE可以初始化為stdin, stdout或stderr的參數(shù),表示與子進程通信的標準輸入流,標準輸出流以及標準錯誤。

subprocess.STDOUT:作為Popen對象的stderr的參數(shù),表示將標準錯誤通過標準輸出流輸出。

Popen類擁有的方法及屬性

1、Popen.pid

獲取子進程的進程ID。

2、Popen.returncode

獲取進程的返回碼。如果進程未結束,將返回None。

3、communicate(input=None)

官方解釋:

Interact with process: Send data to stdin. Read data from
stdout and stderr, until end-of-file is reached. Wait for
process to terminate. The optional input argument should be a
string to be sent to the child process, or None, if no data
should be sent to the child.

communicate() returns a tuple (stdout, stderr).

與子進程進行交互,像stdin發(fā)送數(shù)據(jù),并從stdout和stderr讀出數(shù)據(jù)存在一個tuple中并返回。
參數(shù)input應該是一個發(fā)送給子進程的字符串,如果未指定數(shù)據(jù),將傳入None。

4、poll()

檢查子進程是否結束,并返回returncode屬性。

5、wait()

Wait for child process to terminate. Returns returncode attribute.

等待子進程執(zhí)行結束,并返回returncode屬性,如果為0表示執(zhí)行成功。

6、send_signal( sig)

Send a signal to the process

發(fā)送信號給子進程。

7、terminate()

Terminates the process

終止子進程。windows下將調用Windows API TerminateProcess()來結束子進程。

8、kill()

官方文檔對這個函數(shù)的解釋跟terminate()是一樣的,表示殺死子進程。

進程通信實例1

打開一個只有ip地址的文本文件,讀取其中的ip,然后進行ping操作,并將ping結果寫入ping.txt文件中。
首先創(chuàng)建一個子進程res,傳入要執(zhí)行的shell命令,并獲得標準輸出流、返回碼等。

import subprocess
import os
class Shell(object) :
 def runCmd(self, cmd) :
  res = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
  sout ,serr = res.communicate() 
  return res.returncode, sout, serr, res.pid

shell = Shell()
fp = open('c:\\test\\ip.txt', 'r')
ipList = fp.readlines()
fp.close()
fp = open('c:\\test\\ping.txt', 'a')
print ipList
for i in ipList :
 i = i.strip()
 result = shell.runCmd('ping ' + i)
 if result[0] == 0 :
  w = i + ' : 0'
  fp.write(w + '\n')
 else :
  w = i + ' : 1'
  fp.write(w + '\n')

fp.close()

執(zhí)行結果:

進程通信實例2

命令交互,不斷從鍵盤接受命令執(zhí)行,給出執(zhí)行結果,直到用戶輸入exit或者bye退出命令交互。

import subprocess
class Shell(object) :
 def runCmd(self, cmd) :
  res = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
  sout ,serr = res.communicate()   
  return res.returncode, sout, serr, res.pid

shell = Shell()
while 1 :
 input = raw_input('>')
 if input == 'exit' or input == 'bye' :
  break
 else :
  result = shell.runCmd(input)
  print "返回碼:", result[0]
  print "標準輸出:", result[1]
  print "標準錯誤:", result[2]

在Windows上也可以使用os.system()這個函數(shù)來執(zhí)行一些dos命令,但是這個命令只能拿到返回碼,拿不到標準輸出,標準錯誤,所以通常使用的subprocess模塊中的Popen類來實現(xiàn)。

總結

以上就是本文關于Python subprocess模塊詳細解讀的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關文章

  • Python連接Impala實現(xiàn)步驟解析

    Python連接Impala實現(xiàn)步驟解析

    這篇文章主要介紹了Python連接Impala實現(xiàn)步驟解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • python中重啟for循環(huán),使其重新開始遍歷

    python中重啟for循環(huán),使其重新開始遍歷

    這篇文章主要介紹了python中重啟for循環(huán),使其重新開始遍歷方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Django管理員賬號和密碼忘記的完美解決方法

    Django管理員賬號和密碼忘記的完美解決方法

    這篇文章主要給大家介紹了關于Django管理員賬號和密碼忘記的完美解決方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧
    2018-12-12
  • Django rest framework實現(xiàn)分頁的示例

    Django rest framework實現(xiàn)分頁的示例

    這篇文章主要介紹了Django rest framework實現(xiàn)分頁的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • python 捕獲 shell/bash 腳本的輸出結果實例

    python 捕獲 shell/bash 腳本的輸出結果實例

    下面小編就為大家?guī)硪黄猵ython 捕獲 shell/bash 腳本的輸出結果實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • Python pandas的describe函數(shù)參數(shù)示例詳解

    Python pandas的describe函數(shù)參數(shù)示例詳解

    describe()函數(shù)是pandas 中一個十分實用的工具,用于快速獲取數(shù)據(jù)集的描述性統(tǒng)計信息,本文詳細介紹了該函數(shù)的各種參數(shù)及其用法,包括控制輸出的百分位數(shù)、列類型以及是否將日期時間列視為數(shù)值型列等,感興趣的朋友一起看看吧
    2018-04-04
  • Python list sort方法的具體使用

    Python list sort方法的具體使用

    list.sort()方法是Python的列表方法,用于對原列表進行排序。本文詳細的介紹了list.sort的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2021-12-12
  • python3中rsa加密算法詳情

    python3中rsa加密算法詳情

    這篇文章主要介紹了python3中rsa加密算法詳情,rsa加密,是一種加密算法,目前而言,加密算法,是對數(shù)據(jù)、密碼等進行加密,下文更多相關介紹,需要的小伙伴可以參考一下
    2022-05-05
  • 利用python實現(xiàn)命令行有道詞典的方法示例

    利用python實現(xiàn)命令行有道詞典的方法示例

    平常都是用終端敲, 有時候不會的詞語也懶得打開詞典了,干脆搞了個簡單的查詞命令。下面這篇文章主要給大家介紹了利用python實現(xiàn)命令行有道詞典的方法示例,需要的朋友可以參考借鑒,一起來看看吧。
    2017-01-01
  • python查找特定名稱文件并按序號、文件名分行打印輸出的方法

    python查找特定名稱文件并按序號、文件名分行打印輸出的方法

    這篇文章主要介紹了python查找特定名稱文件并按序號、文件名分行打印輸出的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04

最新評論

大荔县| 锡林浩特市| 齐河县| 阿拉善右旗| 花莲市| 崇州市| 托里县| 濮阳县| 大同县| 东光县| 丹巴县| 沙湾县| 遂平县| 乌苏市| 银川市| 安平县| 南部县| 喀喇| 铁岭县| 莱西市| 阿克陶县| 桦川县| 东山县| 馆陶县| 宝鸡市| 天台县| 额敏县| 湖北省| 胶南市| 陕西省| 阿合奇县| 建阳市| 扎囊县| 松桃| 沂南县| 西林县| 亳州市| 扎囊县| 安庆市| 东至县| 西青区|