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

Python的subprocess模塊總結(jié)

 更新時(shí)間:2014年11月07日 11:34:01   投稿:junjie  
這篇文章主要介紹了Python的subprocess模塊總結(jié),本文詳細(xì)講解了subprocess模塊參數(shù)及Popen方法,然后給出了多個(gè)使用實(shí)例,需要的朋友可以參考下

subprocess意在替代其他幾個(gè)老的模塊或者函數(shù),比如:os.system os.spawn* os.popen* popen2.* commands.*
subprocess最簡(jiǎn)單的用法就是調(diào)用shell命令了,另外也可以調(diào)用程序,并且可以通過(guò)stdout,stdin和stderr進(jìn)行交互。

subprocess的主類(lèi)

復(fù)制代碼 代碼如下:

subprocess.Popen(
      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)

1)、args可以是字符串或者序列類(lèi)型(如:list,元組),用于指定進(jìn)程的可執(zhí)行文件及其參數(shù)。如果是序列類(lèi)型,第一個(gè)元素通常是可執(zhí)行文件的路徑。我們也可以顯式的使用executeable參數(shù)來(lái)指定可執(zhí)行文件的路徑。

2)、bufsize:指定緩沖。0 無(wú)緩沖,1 行緩沖,其他 緩沖區(qū)大小,負(fù)值 系統(tǒng)緩沖(全緩沖)

3)、stdin, stdout, stderr分別表示程序的標(biāo)準(zhǔn)輸入、輸出、錯(cuò)誤句柄。他們可以是PIPE,文件描述符或文件對(duì)象,也可以設(shè)置為None,表示從父進(jìn)程繼承。

4)、preexec_fn只在Unix平臺(tái)下有效,用于指定一個(gè)可執(zhí)行對(duì)象(callable object),它將在子進(jìn)程運(yùn)行之前被調(diào)用。

5)、Close_sfs:在windows平臺(tái)下,如果close_fds被設(shè)置為T(mén)rue,則新創(chuàng)建的子進(jìn)程將不會(huì)繼承父進(jìn)程的輸入、輸出、錯(cuò)誤管道。我們不能將close_fds設(shè)置為T(mén)rue同時(shí)重定向子進(jìn)程的標(biāo)準(zhǔn)輸入、輸出與錯(cuò)誤(stdin, stdout, stderr)。

6)、shell設(shè)為true,程序?qū)⑼ㄟ^(guò)shell來(lái)執(zhí)行。

7)、cwd用于設(shè)置子進(jìn)程的當(dāng)前目錄

8)、env是字典類(lèi)型,用于指定子進(jìn)程的環(huán)境變量。如果env = None,子進(jìn)程的環(huán)境變量將從父進(jìn)程中繼承。
Universal_newlines:不同操作系統(tǒng)下,文本的換行符是不一樣的。如:windows下用'/r/n'表示換,而Linux下用'/n'。如果將此參數(shù)設(shè)置為T(mén)rue,Python統(tǒng)一把這些換行符當(dāng)作'/n'來(lái)處理。startupinfo與createionflags只在windows下用效,它們將被傳遞給底層的CreateProcess()函數(shù),用于設(shè)置子進(jìn)程的一些屬性,如:主窗口的外觀,進(jìn)程的優(yōu)先級(jí)等等。

9)、startupinfo與createionflags只在windows下有效,它們將被傳遞給底層的CreateProcess()函數(shù),用于設(shè)置子進(jìn)程的一些屬性,如:主窗口的外觀,進(jìn)程的優(yōu)先級(jí)等等。

Popen方法

1)、Popen.poll():用于檢查子進(jìn)程是否已經(jīng)結(jié)束。設(shè)置并返回returncode屬性。

2)、Popen.wait():等待子進(jìn)程結(jié)束。設(shè)置并返回returncode屬性。

3)、Popen.communicate(input=None):與子進(jìn)程進(jìn)行交互。向stdin發(fā)送數(shù)據(jù),或從stdout和stderr中讀取數(shù)據(jù)??蛇x參數(shù)input指定發(fā)送到子進(jìn)程的參數(shù)。Communicate()返回一個(gè)元組:(stdoutdata, stderrdata)。注意:如果希望通過(guò)進(jìn)程的stdin向其發(fā)送數(shù)據(jù),在創(chuàng)建Popen對(duì)象的時(shí)候,參數(shù)stdin必須被設(shè)置為PIPE。同樣,如果希望從stdout和stderr獲取數(shù)據(jù),必須將stdout和stderr設(shè)置為PIPE。

4)、Popen.send_signal(signal):向子進(jìn)程發(fā)送信號(hào)。

5)、Popen.terminate():停止(stop)子進(jìn)程。在windows平臺(tái)下,該方法將調(diào)用Windows API TerminateProcess()來(lái)結(jié)束子進(jìn)程。

6)、Popen.kill():殺死子進(jìn)程。

7)、Popen.stdin:如果在創(chuàng)建Popen對(duì)象是,參數(shù)stdin被設(shè)置為PIPE,Popen.stdin將返回一個(gè)文件對(duì)象用于策子進(jìn)程發(fā)送指令。否則返回None。

8)、Popen.stdout:如果在創(chuàng)建Popen對(duì)象是,參數(shù)stdout被設(shè)置為PIPE,Popen.stdout將返回一個(gè)文件對(duì)象用于策子進(jìn)程發(fā)送指令。否則返回None。

9)、Popen.stderr:如果在創(chuàng)建Popen對(duì)象是,參數(shù)stdout被設(shè)置為PIPE,Popen.stdout將返回一個(gè)文件對(duì)象用于策子進(jìn)程發(fā)送指令。否則返回None。

10)、Popen.pid:獲取子進(jìn)程的進(jìn)程ID。

11)、Popen.returncode:獲取進(jìn)程的返回值。如果進(jìn)程還沒(méi)有結(jié)束,返回None。

12)、subprocess.call(*popenargs, **kwargs):運(yùn)行命令。該函數(shù)將一直等待到子進(jìn)程運(yùn)行結(jié)束,并返回進(jìn)程的returncode。文章一開(kāi)始的例子就演示了call函數(shù)。如果子進(jìn)程不需要進(jìn)行交互,就可以使用該函數(shù)來(lái)創(chuàng)建。

13)、subprocess.check_call(*popenargs, **kwargs):與subprocess.call(*popenargs, **kwargs)功能一樣,只是如果子進(jìn)程返回的returncode不為0的話(huà),將觸發(fā)CalledProcessError異常。在異常對(duì)象中,包括進(jìn)程的returncode信息。

以上全是抄的

在程序中運(yùn)行其他程序或shell

可以這樣寫(xiě)

復(fù)制代碼 代碼如下:

subprocess.Popen('腳本/shell', shell=True)

也可以這樣

復(fù)制代碼 代碼如下:

subprocess.call('腳本/shell', shell=True)

兩者的區(qū)別是前者無(wú)阻塞,會(huì)和主程序并行運(yùn)行,后者必須等待命令執(zhí)行完畢,如果想要前者編程阻塞可以這樣
復(fù)制代碼 代碼如下:

s = subprocess.Popen('腳本/shell', shell=True)
s.wait()

程序返回運(yùn)行結(jié)果

有時(shí)候我們需要程序的返回結(jié)果,可以這樣做。

復(fù)制代碼 代碼如下:

>>> s = subprocess.Popen('ls -l', shell=True, stdout=subprocess.PIPE)
>>> s.communicate()
('\xe6\x80\xbb\xe7\x94\xa8\xe9\x87\x8f 152\n-rw------- 1 limbo limbo   808  7\xe6\x9c\x88  6 17:46 0000-00-00-welcome-to-jekyll.markdown.erb\ndrwx------ 2 limbo limbo  4096  8\xe6\x9c\x88 15 18:43 arg\ndrwx------ 2 limbo limbo  4096  8\xe6\x9c\x88  7 17:37 argv\ndrwxrwxr-x 2 limbo limbo  4096  9\xe6\x9c\x88 10 15:27 c\ndrwxrwxr-x 3 limbo limbo  4096  9\xe6\x9c\x88 11 14:35 d3\ndrwxrwxr-x 3 limbo limbo  4096  9\xe6\x9n', None)

它會(huì)返回一個(gè)元組:(stdoutdata, stderrdata)

subprocess還有另一種更簡(jiǎn)單方法,效果一樣,它會(huì)返回stdout

復(fù)制代碼 代碼如下:

>>> s = subprocess.check_output('ls -l', shell=True)
>>> s
'\xe6\x80\xbb\xe7\x94\xa8\xe9\x87\x8f 152\n-rw------- 1 limbo limbo   808  7\xe6\x9c\x88  6 17:46 0000-00-00-welcome-to-jekyll.markdown.erb\ndrwx------ 2 limbo limbo  4096  8\xe6\x9c\x88 15 18:43 arg\ndrwx------ 2 limbo limbo  4096  8\xe6\x9c\x88  7 17:37 argv\ndrwxrwxr-x 2 limbo limbo  4096  9\xe6\x9c\x88 10 15:27 c\ndrwxrwxr-x 3 limbo limbo  4096  9\xe6\x9c\x88 11 14:35 d3\ndrwxrwxr-x 3 limbo limbo  4096  9\xe6\x9n'

前者可以實(shí)現(xiàn)更多的交互,如stderr和stdin,但是在前面調(diào)用Popen的時(shí)候要實(shí)現(xiàn)定義Popen(stdin=subprocess.PIPE, stderr=subprocess)

給子進(jìn)程輸入

復(fù)制代碼 代碼如下:

import subprocess
child = subprocess.Popen(["cat"], stdin=subprocess.PIPE)
child.communicate("vamei")

()不為空,則寫(xiě)入subprocess.PIPE,為空,則從subprocess.PIPE讀取


subprocess.PIPE

復(fù)制代碼 代碼如下:

#!/usr/bin/env python
import subprocess
child1 = subprocess.Popen(["ls","-l"], stdout=subprocess.PIPE)
child2 = subprocess.Popen(["wc"], stdin=child1.stdout,stdout=subprocess.PIPE)
out = child2.communicate()
print out

實(shí)際上是這樣的過(guò)程

復(fù)制代碼 代碼如下:

child1.stdout-->subprocess.PIPE

child2.stdin<--subprocess.PIPE

child2.stdout-->subprocess.PIPE


要注意的是,communicate()是Popen對(duì)象的一個(gè)方法,該方法會(huì)阻塞父進(jìn)程,直到子進(jìn)程完成。

subprocess.PIPE實(shí)際上為文本流提供一個(gè)緩存區(qū)。直到communicate()方法從PIPE中讀取出PIPE中的文本.要注意的是,communicate()是Popen對(duì)象的一個(gè)方法,該方法會(huì)阻塞父進(jìn)程,直到子進(jìn)程完成。

相關(guān)文章

  • Python中figure與axies繪圖有哪些不同

    Python中figure與axies繪圖有哪些不同

    這篇文章主要介紹了Python中figure與axies繪圖有哪些不同,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-02-02
  • Python自動(dòng)化測(cè)試之登錄腳本的實(shí)現(xiàn)

    Python自動(dòng)化測(cè)試之登錄腳本的實(shí)現(xiàn)

    本文主要介紹了Python自動(dòng)化測(cè)試之登錄腳本的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python的語(yǔ)法基礎(chǔ)你真的了解嗎

    Python的語(yǔ)法基礎(chǔ)你真的了解嗎

    這篇文章主要為大家詳細(xì)介紹了Python的語(yǔ)法基礎(chǔ),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • Python Pygame實(shí)現(xiàn)俄羅斯方塊

    Python Pygame實(shí)現(xiàn)俄羅斯方塊

    這篇文章主要為大家詳細(xì)介紹了Python Pygame實(shí)現(xiàn)俄羅斯方塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • Python機(jī)器學(xué)習(xí)庫(kù)之Scikit-learn基本用法詳解

    Python機(jī)器學(xué)習(xí)庫(kù)之Scikit-learn基本用法詳解

    Scikit-learn?是?Python?中最著名的機(jī)器學(xué)習(xí)庫(kù)之一,它提供了大量實(shí)用的機(jī)器學(xué)習(xí)算法以及相關(guān)的工具,可以方便我們進(jìn)行數(shù)據(jù)挖掘和數(shù)據(jù)分析,在這篇文章中,我們將介紹?Scikit-learn?的基本使用,包括如何導(dǎo)入數(shù)據(jù)、預(yù)處理數(shù)據(jù)、選擇和訓(xùn)練模型,以及評(píng)估模型的性能
    2023-07-07
  • python web框架學(xué)習(xí)筆記

    python web框架學(xué)習(xí)筆記

    這篇文章主要為大家分享了python web框架學(xué)習(xí)筆記,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Python學(xué)習(xí)筆記(二)基礎(chǔ)語(yǔ)法

    Python學(xué)習(xí)筆記(二)基礎(chǔ)語(yǔ)法

    對(duì)于任何一門(mén)語(yǔ)言的學(xué)習(xí),學(xué)語(yǔ)法是最枯燥無(wú)味的,但又不得不學(xué),基礎(chǔ)概念較繁瑣,本文將不多涉及概念解釋?zhuān)美舆M(jìn)行相關(guān)解析,適當(dāng)與C語(yǔ)言對(duì)比,避免陷入語(yǔ)法的苦海。我認(rèn)為初學(xué)者學(xué)習(xí)語(yǔ)法的目標(biāo)是學(xué)會(huì)使用即可,關(guān)于對(duì)概念的深入理解,剖析,沒(méi)有一定的知識(shí)積累是很難做到的。
    2014-06-06
  • Python中reset_index()函數(shù)的使用

    Python中reset_index()函數(shù)的使用

    本文主要介紹了Python中reset_index()函數(shù)的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Python autoescape標(biāo)簽用法解析

    Python autoescape標(biāo)簽用法解析

    這篇文章主要介紹了Python autoescape標(biāo)簽用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Python繪制分段函數(shù)的實(shí)現(xiàn)示例

    Python繪制分段函數(shù)的實(shí)現(xiàn)示例

    本文主要介紹了Python繪制分段函數(shù)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04

最新評(píng)論

称多县| 同心县| 井陉县| 晋宁县| 湖北省| 龙胜| 凤庆县| 连江县| 应用必备| 长沙市| 普洱| 东至县| 桦南县| 锡林浩特市| 武冈市| 绵阳市| 汨罗市| 信宜市| 禹州市| 天台县| 沁水县| 三原县| 精河县| 绥宁县| 高淳县| 贞丰县| 大悟县| 成安县| 孟津县| 海城市| 大英县| 左权县| 江安县| 武邑县| 墨竹工卡县| 屯昌县| 海兴县| 永新县| 襄汾县| 安庆市| 图木舒克市|