python3 十二、執(zhí)行command

我們?cè)谑褂玫臅r(shí)候也經(jīng)常需要調(diào)用其他程序
例如:在app自動(dòng)化時(shí)我們要獲取手機(jī)的uuid和version,以及啟用appium server
這時(shí)就用到了我們subprocess庫(kù)
庫(kù)里面有很多的函數(shù)方法本篇博文就不做細(xì)細(xì)解釋了
只說(shuō)幾個(gè)我們常用的方法
首先是popen類,這個(gè)類是將command放在新進(jìn)程的子進(jìn)程執(zhí)行

"""
Execute a child program in a new process.

    For a complete description of the arguments see the Python documentation.

    Arguments:
      args: A string, or a sequence of program arguments.  # 字符串類型或者序列(tuple\list)

      bufsize: supplied as the buffering argument to the open() function when
          creating the stdin/stdout/stderr pipe file objects  # 緩沖

      executable: A replacement program to execute.

      stdin, stdout and stderr: These specify the executed programs' standard
          input, standard output and standard error file handles, respectively.  # 一般使用subprocess.PIPE比較多,該模式的意思是打開(kāi)通向標(biāo)準(zhǔn)流的管道

      preexec_fn: (POSIX only) An object to be called in the child process
          just before the child is executed.

      close_fds: Controls closing or inheriting of file descriptors.

      shell: If true, the command will be executed through the shell.  # 當(dāng)args為字符串時(shí),shell=True

      cwd: Sets the current directory before the child is executed.

      env: Defines the environment variables for the new process.

      text: If true, decode stdin, stdout and stderr using the given encoding
          (if set) or the system default otherwise.

      universal_newlines: Alias of text, provided for backwards compatibility.

      startupinfo and creationflags (Windows only)

      restore_signals (POSIX only)

      start_new_session (POSIX only)

      pass_fds (POSIX only)

      encoding and errors: Text mode encoding and error handling to use for
          file objects stdin, stdout and stderr.

    Attributes:
        stdin, stdout, stderr, pid, returncode
"""

Popen().communicate方法用于與執(zhí)行的程序做交互,返回(stdout, stderr)元組
stdout為正常輸出,stderr為錯(cuò)誤輸出

獲取設(shè)備UUID和version 封裝好的實(shí)例

import subprocess


class Command:

    def __cmd_run(self, command):
        try:
            out, err = \
                subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True).communicate()
            out = str(out, encoding="utf8").strip()
            err = str(err, encoding="uft8").strip()
            if err:
                raise Exception("run command error {}".format(err))
        except:
            raise
        else:
            return out

    def devices_and_version(self):
        devices_uuid = self.__get_devices()
        versions = self.__get_version()
        res = list(zip(devices_uuid, versions))
        return res

    def __get_devices(self):
        command = "adb devices"
        res = self.__cmd_run(command)
        if "\r\n" in res:  # windows newline == \r\n
            res = res.split("\r\n")
        if "\n" in res:  # linux newline == \n
            res = res.split("\n")
        res.remove("List of devices attached")
        devices = []
        for item in res:
            if "device" in item:
                device = item.split("\t")[0]
                devices.append(device)
        return devices

    def __get_version(self):
        uuids = self.__get_devices()
        command = "adb -s {} shell getprop ro.build.version.release"
        versions = []
        for uuid in uuids:
            version = self.__cmd_run(command.format(uuid))
            versions.append(version)
        return versions

http://www.reibang.com/p/af5c6b1104d8 結(jié)合看更佳

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末辅柴,一起剝皮案震驚了整個(gè)濱河市吆玖,隨后出現(xiàn)的幾起案子抒抬,更是在濱河造成了極大的恐慌复局,老刑警劉巖冲簿,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異亿昏,居然都是意外死亡峦剔,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門角钩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)吝沫,“玉大人呻澜,你說(shuō)我怎么就攤上這事〔蚁眨” “怎么了羹幸?”我有些...
    開(kāi)封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)辫愉。 經(jīng)常有香客問(wèn)我栅受,道長(zhǎng),這世上最難降的妖魔是什么一屋? 我笑而不...
    開(kāi)封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮袋哼,結(jié)果婚禮上冀墨,老公的妹妹穿的比我還像新娘。我一直安慰自己涛贯,他們只是感情好诽嘉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著弟翘,像睡著了一般虫腋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上稀余,一...
    開(kāi)封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天悦冀,我揣著相機(jī)與錄音,去河邊找鬼睛琳。 笑死盒蟆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的师骗。 我是一名探鬼主播历等,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼辟癌!你這毒婦竟也來(lái)了寒屯?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤黍少,失蹤者是張志新(化名)和其女友劉穎寡夹,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體厂置,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡要出,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了农渊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片患蹂。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡或颊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出传于,到底是詐尸還是另有隱情囱挑,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布沼溜,位于F島的核電站平挑,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏系草。R本人自食惡果不足惜通熄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望找都。 院中可真熱鬧唇辨,春花似錦、人聲如沸能耻。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)晓猛。三九已至饿幅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間戒职,已是汗流浹背栗恩。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留洪燥,地道東北人摄凡。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蚓曼,于是被迫代替她去往敵國(guó)和親亲澡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350