python 執行系統命令后獲取返回值


 

# #!/usr/bin/env python
# -*- coding: utf-8 -*-

import subprocess
import os


# 方法一:os.system()
# 返回值:返回對應狀態碼,且狀態碼只會有0(成功)、1、2。
# 其它說明:os.system()的返回值並不是執行程序的返回結果。而是一個16位的數,它的高位才是返回碼。也就是說os.system()執行返回256即 0×0100,返回碼應該是其高位0×01即1。所以要獲取它的狀態碼的話,需要通過>>8移位獲取。
def adb_shell(cmd):
    exit_code = os.system(cmd)
    return exit_code>>8
    # # os.system(cmd)命令會直接把結果輸出,所以在不對狀態碼進行分析處理的情況下,一般直接調用即可
    # os.system(cmd)


# # 方法二:os.popen()
# # 返回值:返回腳本命令輸出的內容
# # 其它說明:os.popen()可以實現一個“管道”,從這個命令獲取的值可以繼續被調用。而os.system不同,它只是調用,調用完后自身退出,執行成功直接返回個0。
# def adb_shell(cmd):
#     result = os.popen(cmd).read()
#     return result


# # 方法三:subprocess.Popen()
# # 返回值:Popen類的構造函數,返回結果為subprocess.Popen對象,腳本命令的執行結果可以通過stdout.read()獲取。
# def adb_shell(cmd):
#     # 執行cmd命令,如果成功,返回(0, 'xxx');如果失敗,返回(1, 'xxx')
#     res = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) # 使用管道
#     result = res.stdout.read()  # 獲取輸出結果
#     res.wait()  # 等待命令執行完成
#     res.stdout.close() # 關閉標准輸出
#     return result


# # 方法四:subprocess.getstatusoutput()
# # 返回值:返回是一個元組,如果成功,返回(0, 'xxx');如果失敗,返回(1, 'xxx')
# def adb_shell(cmd):
#     result = subprocess.getstatusoutput(cmd)
#     return result


cmd = 'adb shell dumpsys activity | grep "Run #"'
print(adb_shell(cmd))

 

四種方法中,需要根據不同需求來采用對應不同方法。
1.如果不需要對執行結果內容進行處理的,可以用方法一的os.system(),當然,也可以用其它三種方法。
2.由於方法一的os.system()會直接將執行結果輸出來,不受我們控制。如果不想要把結果直接輸出來,則只能采用后面三種方法。
3.subprocess.getstatusoutput()其實是對subprocess.Popen()的封裝,兩者的區別是subprocess.getstatusoutput()返回一個帶有狀態碼status和結果output的元組,而subprocess.Popen()則直接返回結果output。

 

參考鏈接:https://testerhome.com/topics/20497

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM