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

您的位置:首頁技術(shù)文章
文章詳情頁

Python中判斷subprocess調(diào)起的shell命令是否結(jié)束

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

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

環(huán)境

Python:2.7.10

庫:subprocess, logging

問題

使用subprocess的Popen類來執(zhí)行shell命令,要怎么樣才能知道命令執(zhí)行結(jié)束了,以此來執(zhí)行回調(diào)方法。

解決辦法

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

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

1. 當(dāng)命令未運(yùn)行結(jié)束的時(shí)候,返回None   

2. 當(dāng)命令結(jié)束時(shí),返回命令的返回值

演示

這里使用logging模塊來輔助顯示命令執(zhí)行時(shí)間

Python中判斷subprocess調(diào)起的shell命令是否結(jié)束

分別使用兩種調(diào)用shell命令的方式來測試

shell=True

Python中判斷subprocess調(diào)起的shell命令是否結(jié)束

shell=False

Python中判斷subprocess調(diào)起的shell命令是否結(jié)束

完整演示

Python中判斷subprocess調(diào)起的shell命令是否結(jié)束

補(bǔ)充:system函數(shù)返回(如何判斷調(diào)用的shell命令是否執(zhí)行成功)

例:

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

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

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

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

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

都錯(cuò)!

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函數(shù)對返回值的處理,涉及3個(gè)階段:

階段1:創(chuàng)建子進(jìn)程等準(zhǔn)備工作。如果失敗,返回-1。

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

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

備注1:

只要能夠調(diào)用到/bin/sh,并且執(zhí)行shell過程中沒有被其他信號(hào)異常中斷,都算正常結(jié)束。

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

如果shell腳本執(zhí)行過程中被強(qiáng)制kill掉等情況則算異常結(jié)束。

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

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

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

所以綜上,判斷一個(gè)system函數(shù)調(diào)用shell腳本是否正常結(jié)束的方法應(yīng)該是如下3個(gè)條件同時(shí)成立:

(1)-1 != status

(2)WIFEXITED(status)為真

(3)0 == WEXITSTATUS(status)

注意:

根據(jù)以上分析,當(dāng)shell腳本不存在、沒有執(zhí)行權(quán)限等場景下時(shí),以上前2個(gè)條件仍會(huì)成立,此時(shí)WEXITSTATUS(status)為127,126等數(shù)值。

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

判斷shell腳本正常執(zhí)行結(jié)束的健全代碼如下:

#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; }

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
视频一区二区中文字幕| 久久久久91| 亚洲精品1区2区| 久久久久久久久丰满| 久久影视一区| 欧美日韩色图| 欧美大黑bbbbbbbbb在线| 亚洲五月婷婷| 国产亚洲激情| 亚洲欧美日本日韩| 午夜在线观看免费一区| 蜜桃久久久久久久| 亚洲精品少妇| 日韩精品久久久久久久软件91| 四虎精品一区二区免费| 午夜久久一区| 久久亚洲国产精品一区二区| 在线精品福利| 日韩欧乱色一区二区三区在线| 日韩国产欧美三级| 蜜桃久久久久| 日韩欧美一区二区三区免费看| 97se综合| 黄色亚洲精品| 亚洲精品三级| 欧美交a欧美精品喷水| 精品亚洲成人| 99精品综合| 蜜臀av亚洲一区中文字幕| 日韩专区欧美专区| 亚洲久久在线| 国产精品白浆| 精品三级久久| 老牛影视一区二区三区| 国产欧美亚洲精品a| 中文字幕人成乱码在线观看| 欧美粗暴jizz性欧美20| 欧美久久久网站| 欧美日本精品| 日韩午夜高潮| 精品无人区麻豆乱码久久久| 亚洲自啪免费| 亚洲香蕉网站| 色综合www| 中文字幕日本一区二区| 国产伦理久久久久久妇女| 裤袜国产欧美精品一区| 日韩一级不卡| 国产精品久久久久久模特| 成人片免费看| 亚洲精品一区二区在线播放∴| 久久av免费| 精品一区亚洲| 欧美久久香蕉| 欧美午夜精彩| 国产区精品区| 亚洲精品一区二区在线看| 欧美日韩精品一区二区三区视频 | 99久久婷婷| 亚洲免费资源| 水蜜桃久久夜色精品一区| 亚洲欧美日韩国产| 久久免费视频66| 久久99伊人| 欧美好骚综合网| 免费视频最近日韩| 久久亚州av| 中文视频一区| 日韩精品2区| 在线亚洲激情| 九九久久国产| 亚洲欧美日本视频在线观看| 欧美国产中文高清| 视频一区二区中文字幕| 成人午夜精品| 国产精品一区2区3区| 一本色道精品久久一区二区三区| 里番精品3d一二三区| 亚洲精品1区2区| 中文字幕人成乱码在线观看| 日本欧美韩国一区三区| 一区三区视频| 久久影院午夜精品| 69堂精品视频在线播放| 久久天堂精品| 精品高清久久| 日本午夜精品视频在线观看| 在线精品小视频| 亚洲黄色网址| 久久久亚洲欧洲日产| 日韩欧美在线精品| 欧美日韩色图| 日韩av专区| 欧美偷窥清纯综合图区| 午夜宅男久久久| 91精品推荐| 国产一区二区三区久久| 国产午夜一区| 婷婷综合成人| 欧美网站在线| 91精品国产成人观看| 国产中文在线播放| 欧美激情视频一区二区三区免费 | 日本欧美在线| 亚洲久久视频| 亚洲一区二区网站| 九九久久婷婷| 久久三级视频| 日韩在线短视频| 精品亚洲成人| 国产欧美日韩一级| 欧美一级一区| 国产欧美丝祙| 国产日本亚洲| 国产在线观看91一区二区三区| 国产一区二区三区久久| 亚洲最新无码中文字幕久久 | 欧美亚洲一区二区三区| 久久国产婷婷国产香蕉| 免费在线观看一区| 国际精品欧美精品| 精品久久美女| 国产精品99一区二区| 久久亚洲风情| 欧美在线日韩| 成人在线视频区| 亚洲一级黄色| 亚洲人成毛片在线播放女女| 国产精品调教| 高清av不卡| 狠狠爱www人成狠狠爱综合网| 蜜臀va亚洲va欧美va天堂| 97久久中文字幕| 国产+成+人+亚洲欧洲在线| 亚洲一级二级| 亚洲精品乱码| 国产欧美一级| 久久久天天操| 影音先锋久久精品| 国产精品流白浆在线观看| 国产高清不卡| 狠狠干成人综合网| 日本视频一区二区| 六月婷婷综合| 亚洲欧美日韩国产一区| 国产精品99精品一区二区三区∴ | 99视频精品全部免费在线视频| 亚洲一区激情| 国产精品片aa在线观看| 韩国三级一区| 亚洲精选91| 国产传媒在线观看| 首页国产欧美久久| 久久av超碰| 欧美日韩激情| 日韩动漫一区| 女生影院久久| 99久久久久国产精品| 亚洲专区在线| 亚洲人成亚洲精品| 国产精品久久久久久模特| 国产欧洲在线| 日韩精品一区二区三区中文| 亚洲精品视频一二三区| 国产高清不卡| 日本中文字幕不卡| 亚洲成人av观看| 日韩av影院| 不卡一区2区| 久久97视频| 蜜臀久久99精品久久久画质超高清| 精品欧美激情在线观看| 亚洲天堂免费电影| 日韩一区精品视频| 国产免费久久| 欧美sss在线视频| 亚洲精品进入| 四虎在线精品| 久久亚洲人体| 日韩和欧美一区二区| 在线日韩电影| 久久久亚洲欧洲日产| 亚洲精品一二| 久久99精品久久久野外观看| 国产欧美一区二区三区国产幕精品 | 国产在线日韩| 日韩av一区二区三区| 日韩精品一级二级| 精品欧美一区二区三区在线观看| 国产日韩欧美三区| 蜜桃av一区二区三区电影| 中文字幕在线官网| 欧美激情福利| 亚洲精品自拍| 五月综合激情| 色婷婷精品视频| 久久久久观看| 青青草视频一区| 在线视频精品| 婷婷成人在线|