python中執行系統命令常見方法有兩種:
兩者均需 import os
(1) os.system
# 僅僅在乙個子終端執行系統命令,而不能獲取命令執行後的返回資訊
system(command) -> exit_status
execute the command (a string) in a subshell.
# 如果再命令列下執行,結果直接列印出來
1
>>> os.system(
'ls'
)
3
11.wmv
books 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
)
獲取返回和輸出:
1
import
subprocess
3
for
line
in
p.stdout.readlines():
5
retval
=
p.wait()
(4) 使用模組commands模組
1
>>>
import
commands
3
[
'__all__'
,
'__builtins__'
,
'__doc__'
,
'__file__'
,
'__name__'
,
'getoutput'
,
'getstatus'
,
'getstatusoutput'
,
'mk2arg'
,
'mkarg'
]
5
'wed jun 10 19:39:57 cst 2009'
7
>>> commands.getstatusoutput(
"date"
)
檢視源**
列印1
traceback (most recent call last):
3
main()
5
fax.sendfax()
7
os.popen(cmd)
8
unicodeencodeerror:
'ascii'
codec can't encode characters
in
position 46-52: ordinal not
in
range(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 函式,僅僅在乙個子終端執行系統命令,而不...