Python執行系統命令的方法

2021-06-29 12:31:10 字數 4547 閱讀 8799

python中執行系統命令常見方法有兩種:

兩者均需 import os

(1) os.system

# 僅僅在乙個子終端執行系統命令,而不能獲取命令執行後的返回資訊

system(command) -> exit_status

execute the command (a string) in a subshell.

# 如果再命令列下執行,結果直接列印出來

1>>> os.system('ls')

311.wmvbooks     downloads   pictures  python

02>>>tmp

04['dump_db_pickle.py ',

06'dump_db_shelve.py ',

08'__init__.py ',

10'make_db_pickle_recs.py ',

12'peopleinteract_query.py ',

14'testargv.py ',

16'update_db_pickle.py ',

2>>> subprocess.call (["cmd","arg1","arg2"],shell=true)

獲取返回和輸出:

1importsubprocess

3forlineinp.stdout.readlines():

5retval=p.wait()

(4)  使用模組commands模組

1>>>importcommands

3['__all__','__builtins__','__doc__','__file__','__name__','getoutput','getstatus','getstatusoutput','mk2arg','mkarg']

5'wed jun 10 19:39:57 cst 2009'

7>>> commands.getstatusoutput("date")

檢視源**

列印1traceback (most recent call last):

3main()

5fax.sendfax()

7os.popen(cmd)

8unicodeencodeerror:'ascii'codec can't encode charactersinposition 46-52: ordinal notinrange(128)

os.system('cat /proc/cpuinfo')

output = os.popen('cat /proc/cpuinfo')

print output.read()

通過 os.popen() 返回的是 file read 的物件,對其進行讀取 read() 的操作可以看到執行的輸出。但是怎麼讀取程式執行的返回值呢。google 給我指向了 commands — utilities for running commands。

這樣通過 commands.getstatusoutput() 乙個方法就可以獲得到返回值和輸出,非常好用。

(status, output) = commands.getstatusoutput('cat /proc/cpuinfo')

print status, output

python document 中給的乙個例子,很清楚的給出了各方法的返回。

>>> import commands

>>> commands.getstatusoutput('ls /bin/ls')

(0, '/bin/ls')

>>> commands.getstatusoutput('cat /bin/junk')

(256, 'cat: /bin/junk: no such file or directory')

>>> commands.getstatusoutput('/bin/junk')

(256, 'sh: /bin/junk: not found')

>>> commands.getoutput('ls /bin/ls')

'/bin/ls'

>>> commands.getstatus('/bin/ls')

'-rwxr-xr-x 1 root 13352 oct 14 1994 /bin/ls' 

os.system(cmd)的返回值只會有0(成功),1,2

os.popen(cmd)會把執行的cmd的輸出作為值返回。

python呼叫shell指令碼,有兩種方法:os.system(cmd)或os.popen(cmd),前者返回值是指令碼的退出狀態碼,後者的返回值是指令碼執行過程中的輸出內容。實際使用時視需求情況而選擇。

現假定有乙個shell指令碼test.sh:

#!/bin/bash

1. echo "hello world!"

2. exit 3

os.system(cmd):

該方法在呼叫完shell指令碼後,返回乙個16位的二進位制數,低位為殺死所呼叫指令碼的訊號號碼,高位為指令碼的退出狀態碼,即指令碼中「exit 1」的**執行後,os.system函式返回值的高位數則是1,如果低位數是0的情況下,則函式的返回值是0×100,換算為10進製得到256。

如果我們需要獲得os.system的正確返回值,那使用位移運算可以還原返回值:

1. >>>  n = os.system(test.sh)

2. >>> n >> 8

3. >>> 3

os.popen(cmd):

這種呼叫方式是通過管道的方式來實現,函式返回乙個file-like的物件,裡面的內容是指令碼輸出的內容(可簡單理解為echo輸出的內容)。使用os.popen呼叫test.sh的情況:

python呼叫shell指令碼,有兩種方法:os.system(cmd)或os.popen(cmd),前者返回值是指令碼的退出狀態碼,後者的返回值是指令碼執行過程中的輸出內容。實際使用時視需求情況而選擇。

明顯地,像呼叫」ls」這樣的shell命令,應該使用popen的方法來獲得內容

以前就疑惑popen和system有什麼不同,今天實際的應用,才讓我恍然大悟

os.popen()可以實現乙個「管道」,從這個命令獲取的值可以繼續被呼叫。而os.system不同,它只是呼叫,呼叫完後自身退出,可能返回個0吧

比如,我想得到ntpd的程序id,就要這麼做:

os.popen('ps -c ntpd | grep -v cmd |awk '').readlines()[0]

Python執行系統命令的方法

最近在做那個測試框架的時候發現 python 的另乙個獲得系統執行命令的返回值和輸出的類。最開始的時候用 python 學會了 os.system 這個方法是很多比如 c,perl 相似的。os.system cat proc cpuinfo 但是這樣是無法獲得到輸出和返回值的,繼續 google,...

python執行系統命令的方法

做為系統工程師來說,經常會用到python指令碼去呼叫一下系統命令,現把經常使用的集中呼叫方法總結如下 一,os.system command 在乙個子shell中執行command命令,並返回command命令執行完畢後的退出狀態。這個函式執行命令的結果無法儲存,只能顯示在標準輸出。但是,命令執行...

python執行系統命令的方法有哪些?

python是一款操作簡單的程式語言,內建豐富的庫,能夠很容易的實現強大的功能,在使用python進行框架搭建時,往往需要用到python執行系統命令,一些開發人員對此不熟悉,以下是具體的操作方法 1.os.system 這個方法直接呼叫標準c的system 函式,僅僅在乙個子終端執行系統命令,而不...