日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Python中判斷subprocess調起的shell命令是否結束

瀏覽:24日期:2022-06-21 15:05:37
前言

最近在使用subprocess遇到個問題,折騰了好半天才找到簡單的解決辦法,在這里記錄下。

環境

Python:2.7.10

庫:subprocess, logging

問題

使用subprocess的Popen類來執行shell命令,要怎么樣才能知道命令執行結束了,以此來執行回調方法。

解決辦法

使用subprocess.Popen.poll方法來獲取命令的執行情況。

poll方法的返回值有兩種情況   

1. 當命令未運行結束的時候,返回None   

2. 當命令結束時,返回命令的返回值

演示

這里使用logging模塊來輔助顯示命令執行時間

Python中判斷subprocess調起的shell命令是否結束

分別使用兩種調用shell命令的方式來測試

shell=True

Python中判斷subprocess調起的shell命令是否結束

shell=False

Python中判斷subprocess調起的shell命令是否結束

完整演示

Python中判斷subprocess調起的shell命令是否結束

補充:system函數返回(如何判斷調用的shell命令是否執行成功)

例:

status = system('./test.sh');1、先統一兩個說法:

(1)system返回值:指調用system函數后的返回值,比如上例中status為system返回值

(2)shell返回值:指system所調用的shell命令的返回值,比如上例中,test.sh中返回的值為shell返回值。

2、如何正確判斷test.sh是否正確執行?

僅判斷status是否==0?或者僅判斷status是否!=-1?

都錯!

3、man中對于system的說明

RETURN VALUE

The value returned is -1 on error (e.g. fork() failed), and the return

status of the command otherwise. This latter return status is in the

format specified in wait(2). Thus, the exit code of the command will

be WEXITSTATUS(status). In case /bin/sh could not be executed, the

exit status will be that of a command that does exit(127).

看得很暈吧?

system函數對返回值的處理,涉及3個階段:

階段1:創建子進程等準備工作。如果失敗,返回-1。

階段2:調用/bin/sh拉起shell腳本,如果拉起失敗或者shell未正常執行結束(參見備注1),原因值被寫入到status的低8~15比特位中。system的man中只說明了會寫了127這個值,但實測發現還會寫126等值。

階段3:如果shell腳本正常執行結束,將shell返回值填到status的低8~15比特位中。

備注1:

只要能夠調用到/bin/sh,并且執行shell過程中沒有被其他信號異常中斷,都算正常結束。

比如:不管shell腳本中返回什么原因值,是0還是非0,都算正常執行結束。即使shell腳本不存在或沒有執行權限,也都算正常執行結束。

如果shell腳本執行過程中被強制kill掉等情況則算異常結束。

如何判斷階段2中,shell腳本是否正常執行結束呢?系統提供了宏:WIFEXITED(status)。如果WIFEXITED(status)為真,則說明正常結束。

如何取得階段3中的shell返回值?你可以直接通過右移8bit來實現,但安全的做法是使用系統提供的宏:WEXITSTATUS(status)。

由于我們一般在shell腳本中會通過返回值判斷本腳本是否正常執行,如果成功返回0,失敗返回正數。

所以綜上,判斷一個system函數調用shell腳本是否正常結束的方法應該是如下3個條件同時成立:

(1)-1 != status

(2)WIFEXITED(status)為真

(3)0 == WEXITSTATUS(status)

注意:

根據以上分析,當shell腳本不存在、沒有執行權限等場景下時,以上前2個條件仍會成立,此時WEXITSTATUS(status)為127,126等數值。

所以,我們在shell腳本中不能將127,126等數值定義為返回值,否則無法區分中是shell的返回值,還是調用shell腳本異常的原因值。shell腳本中的返回值最好多1開始遞增。

判斷shell腳本正常執行結束的健全代碼如下:

#include <stdio.h>#include <stdlib.h> int main() { pid_t status; status = system('./test.sh'); if(status == -1) { printf('system error... n'); } else { if(WIFEXITED(status)) {if(0 == WEXITSTATUS(status)) { printf('run successfully... n');} else { printf('run failed %d n',WEXITSTATUS(status)); } } else {printf('exit code %d n',WEXITSTATUS(status)); } } return 0; }

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
免费亚洲一区| 亚州国产精品| 麻豆传媒一区二区三区| 国产伦乱精品| 国产精品magnet| 国产精品久久久久久av公交车| 日本午夜精品一区二区三区电影| 日韩精品成人在线观看| 精品久久久久中文字幕小说| 国产传媒在线观看| 日韩专区精品| 激情偷拍久久| 国产一区91| 亚洲精品国产精品粉嫩| 欧美日本三区| 久久精品国产精品亚洲毛片| 久久久久九九精品影院| 韩国久久久久久| 久久久久一区| 免费国产自线拍一欧美视频| 亚洲一二三区视频| 国产人成精品一区二区三| 麻豆精品在线观看| 国产一区不卡| 中文亚洲免费| 日本视频一区二区| 美女视频黄久久| 亚洲h色精品| 热久久久久久久| 国产精品久久久一区二区| 亚洲国产欧美日本视频| 亚洲欧洲日本mm| 欧美一级一区| 欧美aa在线观看| 日韩影院免费视频| 精品一区二区三区视频在线播放 | 国产精品网在线观看| 久久久久久婷| 国产女优一区| 免费精品一区| 亚洲激情精品| 国产精品极品| 欧美+日本+国产+在线a∨观看| 中文字幕av一区二区三区四区| 精品国产欧美| 免费观看久久久4p| 精品视频一区二区三区在线观看 | 最新亚洲国产| 精品久久电影| 午夜在线视频一区二区区别| 国产九一精品| 欧美午夜精彩| 国产精品视频一区二区三区四蜜臂 | 精品在线91| 午夜视频一区二区在线观看| 国产精品伦理久久久久久| 蜜桃久久av一区| 狠狠躁少妇一区二区三区| 亚洲精品在线国产| 久久国产日韩| 久久不见久久见中文字幕免费 | 香蕉精品视频在线观看| 欧美日韩黄网站| 色天使综合视频| 91欧美极品| av亚洲免费| 久久中文字幕一区二区| 伊人精品在线| а√天堂中文在线资源8| 日韩精品免费一区二区夜夜嗨| av亚洲一区二区三区| 国产精品一站二站| 亚洲欧美日本日韩| 日韩免费视频| 国产精品久久久久久久久久齐齐 | 在线观看亚洲精品福利片| 欧美国产偷国产精品三区| 丝袜美腿高跟呻吟高潮一区| 成人污污视频| 久久国产免费看| 日韩午夜一区| 欧美羞羞视频| 欧美极品一区二区三区| 久久亚洲不卡| 久久精品91| 国产成人精品福利| 欧美午夜三级| 亚洲精品一区二区在线播放∴| 成人av动漫在线观看| 国产精品国产三级国产在线观看| 欧美一区二区三区久久| 免费国产自线拍一欧美视频| 国产一区二区三区四区大秀| 久久激情综合网| 日韩在线卡一卡二| 午夜久久福利| 1000部精品久久久久久久久| 色婷婷亚洲mv天堂mv在影片| 国产精品白丝一区二区三区| 日韩高清一区在线| 免费人成在线不卡| 国产午夜久久| 激情婷婷久久| 久久麻豆精品| 秋霞国产精品| 日韩中文在线播放| 在线一区av| 国产高清不卡| 欧美aⅴ一区二区三区视频| 奇米亚洲欧美| 天堂久久一区| 日韩国产精品久久久久久亚洲| 亚洲丝袜啪啪| 在线免费观看亚洲| 中文字幕日韩欧美精品高清在线| 亚洲欧洲日本mm| 国产亚洲福利| 久久不射网站| 国产亚洲精品v| 亚洲欧美日韩专区| 免费成人在线观看| 亚洲精品三级| 亚洲97av| 亚洲视频国产| 日本一区中文字幕| 日本综合视频| 日本精品国产| 国产精品乱战久久久| 国产激情久久| 精品理论电影在线| 国产精品亚洲欧美| 国产激情欧美| 国产精品免费不| sm捆绑调教国产免费网站在线观看| 亚洲风情在线资源| 影视先锋久久| 精品视频97| 亚洲免费一区三区| 福利一区二区| 美日韩一区二区三区| 久久男人av| 国产福利资源一区| 精品国产欧美日韩| 麻豆mv在线观看| 激情综合网站| 一本综合精品| 欧美一区激情| 麻豆一区二区三| 九色porny丨国产首页在线| 美女久久久久| 亚洲免费一区二区| 日韩精选在线| 欧美国产专区| 国产精品porn| 亚洲成人av观看| 欧美日韩在线二区| 免费人成在线不卡| 国产精品久久久久久妇女| 97精品国产| 国产亚洲精品久久久久婷婷瑜伽| 日韩精品一区二区三区中文在线 | av免费不卡国产观看| 欧美在线亚洲| 在线精品亚洲| 国产一区国产二区国产三区| 欧美午夜精品一区二区三区电影| 亚洲精品日本| 国产成人精品一区二区三区视频| 欧美中文字幕一区二区| 日韩精品免费观看视频| 久久久久久久欧美精品| 亚洲三级av| 国产一区二区三区视频在线| 日韩电影二区| 亚洲欧美日韩国产综合精品二区 | 亚洲精品动态| 给我免费播放日韩视频| 国产精品日韩久久久| 国产精品美女在线观看直播| 婷婷成人在线| 欧美激情综合| 夜夜嗨一区二区三区| 蜜桃精品视频| 亚洲欧美日韩在线观看a三区| 精品香蕉视频| 丝袜国产日韩另类美女| 国产精品亲子伦av一区二区三区 | 88xx成人免费观看视频库| 视频一区二区三区中文字幕| 久久99视频| 石原莉奈在线亚洲二区| 福利一区二区| **爰片久久毛片| 在线一区免费| 不卡专区在线| 国产精品日本一区二区不卡视频 | 奇米777国产一区国产二区| 91精品国产乱码久久久久久久 | 午夜av成人| 国产人成精品一区二区三|