python中執行shell的兩種方法總結

2022-04-06 06:14:31 字數 4589 閱讀 3040

一、使用python內建commands模組執行shell

commands對python的os.popen()進行了封裝,使用shell命令字串作為其引數,返回命令的結果資料以及命令執行的狀態;

該命令目前已經廢棄,被subprocess所替代;?1

2345

6789

1011

1213

1415

# coding=utf-8

'''

created on 2023年11月22日

@author: crazyant.net

'''

importcommands

importpprint

defcmd_exe(cmd_string):

print"will exe cmd,cmd:"+cmd_string

returncommands.getstatusoutput(cmd_string)

if__name__=="__main__":

pprint.pprint(cmd_exe("ls -la"))

二、使用python最新的subprocess模組執行shell

python目前已經廢棄了os.system,os.spawn*,os.popen*,popen2.*,commands.*來執行其他語言的命令,subprocesss是被推薦的方法;

subprocess允許你能建立很多子程序,建立的時候能指定子程序和子程序的輸入、輸出、錯誤輸出管道,執行後能獲取輸出結果和執行狀態。?1

2345

6789

1011

1213

1415

1617

1819

2021

2223

2425

2627

2829

3031

3233

3435

3637

3839

4041

42# coding=utf-8

'''

created on 2023年11月22日

@author: crazyant.net

'''

importshlex

importdatetime

importsubprocess

importtime

defexecute_command(cmdstring, cwd=none, timeout=none, shell=false):

"""執行乙個shell命令

封裝了subprocess的popen方法, 支援超時判斷,支援讀取stdout和stderr

引數:

cwd: 執行命令時更改路徑,如果被設定,子程序會直接先更改當前路徑到cwd

timeout: 超時時間,秒,支援小數,精度0.1秒

shell: 是否通過shell執行

returns: return_code

raises: exception: 執行超時

"""

ifshell:

cmdstring_list=cmdstring

else:

cmdstring_list=shlex.split(cmdstring)

iftimeout:

end_time=datetime.datetime.now()+datetime.timedelta(seconds=timeout)

#沒有指定標準輸出和錯誤輸出的管道,因此會列印到螢幕上;

sub=subprocess.popen(cmdstring_list, cwd=cwd, stdin=subprocess.pipe,shell=shell,bufsize=4096)

#subprocess.poll()方法:檢查子程序是否結束了,如果結束了,設定並返回碼,放在subprocess.returncode變數中

whilesub.poll()isnone:

time.sleep(0.1)

iftimeout:

ifend_time <=datetime.datetime.now():

raiseexception("timeout:%s"%cmdstring)

returnstr(sub.returncode)

if__name__=="__main__":

printexecute_command("ls")

也可以在popen中指定stdin和stdout為乙個變數,這樣就能直接接收該輸出變數值。

總結

在python中執行shell有時候也是很必須的,比如使用python的執行緒機制啟動不同的shell程序,目前subprocess是python官方推薦的方法,其支援的功能也是最多的,推薦大家使用。

您可能感興趣的文章:

shell中執行python檔案

python中想在shell中呼叫乙個test.py檔案裡面的方法。test.py檔案裡面的內容如下 python view plain copy print?deflistfea print this is myself deflistfeat fea print this is fea defl...

Python指令碼中執行shell命令

system 其中最後乙個0是這個命令的返回值,為0表示命令執行成功。使用system無法將執行的結果儲存起來。這裡寫描述popen 獲取命令執行的結果,但是沒有命令的執行狀態,這樣可以將獲取的結果儲存起來放到list中。commands 可以很方便的取得命令的輸出 包括標準和錯誤輸出 和執行狀態位...

python中執行shell命令的幾個方法

這篇文章主要介紹了python中執行shell命令的幾個方法,本文一共給出3種方法實現執行shell命令,需要的朋友可以參考下 最近有個需求就是頁面上執行shell命令,第一想到的就是os.system,如下 os.system cat proc cpuinfo 但是發現頁面上列印的命令執行結果 0...