天天看點

python學習——python中執行shell指令

這裡介紹一下python執行shell指令的四種方法:

1、os子產品中的os.system()這個函數來執行shell指令

1

2

3

<code>&gt;&gt;&gt; os.system(</code><code>'ls'</code><code>)</code>

<code>anaconda</code><code>-</code><code>ks.cfg  install.log  install.log.syslog  send_sms_service.py  sms.py</code>

<code>0</code>

注,這個方法得不到shell指令的輸出。

2、popen()#這個方法能得到指令執行後的結果是一個字元串,要自行處理才能得到想要的資訊。

4

5

<code>&gt;&gt;&gt; </code><code>import</code> <code>os</code>

<code>&gt;&gt;&gt; </code><code>str</code> <code>=</code> <code>os.popen(</code><code>"ls"</code><code>).read()</code>

<code>&gt;&gt;&gt; a </code><code>=</code> <code>str</code><code>.split(</code><code>"\n"</code><code>)</code>

<code>&gt;&gt;&gt; </code><code>for</code> <code>b </code><code>in</code> <code>a:</code>

<code>        </code><code>print</code> <code>b</code>

這樣得到的結果與第一個方法是一樣的。

3、commands子產品#可以很友善的取得指令的輸出(包括标準和錯誤輸出)和執行狀态位

6

7

8

9

10

11

12

<code>import</code> <code>commands</code>

<code>a,b </code><code>=</code> <code>commands.getstatusoutput(</code><code>'ls'</code><code>)</code>

<code>a是退出狀态</code>

<code>b是輸出的結果。</code>

<code>&gt;&gt;&gt; </code><code>import</code> <code>commands</code>

<code>&gt;&gt;&gt; a,b </code><code>=</code> <code>commands.getstatusoutput(</code><code>'ls'</code><code>)</code>

<code>&gt;&gt;&gt; </code><code>print</code> <code>a</code>

<code>&gt;&gt;&gt; </code><code>print</code> <code>b</code>

<code>anaconda</code><code>-</code><code>ks.cfg</code>

<code>install.log</code>

<code>install.log.syslog</code>

commands.getstatusoutput(cmd)傳回(status,output)

commands.getoutput(cmd)隻傳回輸出結果

commands.getstatus(file)傳回ls -ld file 的執行結果字元串,調用了getoutput,不建議使用這個方法。

4、subprocess子產品

使用subprocess子產品可以建立新的程序,可以與建立程序的輸入/輸出/錯誤管道連通,并可以獲得建立程序執行的傳回狀态。使用subprocess子產品的目的是替代os.system()、os.popen*()、commands.*等舊的函數或子產品。

import subprocess

1、subprocess.call(command, shell=True)

#會直接列印出結果。

2、subprocess.Popen(command, shell=True) 也可以是subprocess.Popen(command, stdout=subprocess.PIPE, shell=True) 這樣就可以輸出結果了。

如果command不是一個可執行檔案,shell=True是不可省略的。

shell=True意思是shell下執行command

這四種方法都可以執行shell指令。

本文轉自 ZhouLS 51CTO部落格,原文連結:http://blog.51cto.com/zhou123/1312791