Python中讀取子進程的exit code(也作status code或return code)

今天在做把Shell腳本翻譯成Python腳本的日常,對于Shell中$?的用法引伸出一個問題麦锯,就是在Python腳本中如何讀取上一步運行進程的exit code肄渗,也看到有作status code或return code的叫法帽撑,經(jīng)過我的理解覺得是一個東西。簡單地說夷磕,TA就是C語言中main函數(shù)的return值(類型為int)履肃。

先請看Shell腳本偽代碼:

function show_exitcode {
    ./one_application $1 $2
    if [[ $? -ne 0 ]]; then
        echo "One Application Error."
}

關(guān)于$?的用法,可參考閱讀文章《Shell腳本中$0坐桩、$?尺棋、$!、$$绵跷、$*膘螟、$#、$@等的意義以及l(fā)inux命令執(zhí)行返回值代表意義》碾局。

那么問題來了荆残,這段Shell腳本函數(shù),如何用Python表達呢:

def show_exit_code(*args):
    from subprocess import Popen
    p_handler = Popen(
        "./one_application {} {}".format(args[0], args[1]), 
        shell=True
    )
    p_handler.wait()
    if '0' != p_handler.returncode:
        print("One Application Error.")

說到subprocess模塊净当,經(jīng)常使用Python開發(fā)運行腳本的朋友們會相對熟悉一些内斯。TA的作用就是通過Shell命令,運行一個第三方程序或第三方腳本像啼,通過創(chuàng)建Popen的實例化對象俘闯,并將其實例化對象視作為操作這個第三方程序或者腳本的句柄對象。

PS:實際上忽冻,除了Popen之外真朗,上古操作之一,os.system()的返回值就是exit code(類型int)僧诚,就趨勢而言遮婶,Pythonista們更傾向于享用subprocess對os庫中系統(tǒng)操作的完善而帶來的便利。當(dāng)然湖笨,這也是個人習(xí)慣使然旗扑。

理解了這一層的操作,我們還有一個升級版的玩法赶么,在Python腳本內(nèi)部通過內(nèi)建多進程庫multiprocessing創(chuàng)建的子進程肩豁,可否讀到exit code呢?Sure!

#!/usr/bin/env python3
from multiprocessing import Process

def exit_func():
    print('Error 233')
    exit(233)

if __name__ =='__main__':
    p_handler = Process(target=exit_func)
    p_handler.start()
    p_handler.join()
    print(p_handler.exitcode)  # 結(jié)果:233

總結(jié):
1)使用subprocess庫調(diào)用的第三方程序或腳本子進程清钥,可以讀取Popen實例對象的returncode屬性琼锋,即exit code;
2)使用multiprocessing庫創(chuàng)建的子進程祟昭,可以讀取Process實例對象的exitcode屬性缕坎,即exit code;
3)目前為止篡悟,發(fā)現(xiàn)Python完全可以替代shell腳本實現(xiàn)功能谜叹,不同意者歡迎留言扔磚。

感謝您的支持和打賞 (= ̄ω ̄=) --> BuyMeACoffee(Paypal)

如果喜歡這篇文章搬葬,記得收藏和點 ? 噢 ~ ~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末荷腊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子急凰,更是在濱河造成了極大的恐慌女仰,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抡锈,死亡現(xiàn)場離奇詭異疾忍,居然都是意外死亡,警方通過查閱死者的電腦和手機床三,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門一罩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人撇簿,你說我怎么就攤上這事聂渊。” “怎么了补疑?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵歧沪,是天一觀的道長。 經(jīng)常有香客問我莲组,道長,這世上最難降的妖魔是什么暖夭? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任锹杈,我火速辦了婚禮,結(jié)果婚禮上迈着,老公的妹妹穿的比我還像新娘竭望。我一直安慰自己,他們只是感情好裕菠,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布咬清。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪旧烧。 梳的紋絲不亂的頭發(fā)上影钉,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機與錄音掘剪,去河邊找鬼平委。 笑死,一個胖子當(dāng)著我的面吹牛夺谁,可吹牛的內(nèi)容都是我干的廉赔。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼匾鸥,長吁一口氣:“原來是場噩夢啊……” “哼蜡塌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起勿负,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤馏艾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后笆环,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體攒至,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年躁劣,在試婚紗的時候發(fā)現(xiàn)自己被綠了迫吐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡账忘,死狀恐怖志膀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鳖擒,我是刑警寧澤溉浙,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站蒋荚,受9級特大地震影響戳稽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜期升,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一惊奇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧播赁,春花似錦颂郎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽寺酪。三九已至,卻和暖如春替劈,著一層夾襖步出監(jiān)牢的瞬間寄雀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工抬纸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留咙俩,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓湿故,卻偏偏與公主長得像阿趁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子坛猪,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344