亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > Python中判斷subprocess調起的shell命令是否結束

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

熱門標簽:315電話機器人廣告 南京銷售外呼系統軟件 地圖制圖標注位置改變是移位嗎 地圖標注的意義點 上海機器人外呼系統哪家好 蓋州市地圖標注 房產電銷外呼系統 地圖標注微信發送位置不顯示 浙江電銷卡外呼系統好用嗎

前言

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

環境

Python:2.7.10

庫:subprocess, logging

問題

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

解決辦法

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

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

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

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

演示

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

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

shell=True

shell=False

完整演示

補充: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中subprocess shell=False與shell=True的區別
  • python3通過subprocess模塊調用腳本并和腳本交互的操作
  • python subprocess pipe 實時輸出日志的操作
  • 通過實例解析python subprocess模塊原理及用法
  • 使用python執行shell腳本 并動態傳參 及subprocess的使用詳解
  • python中的subprocess.Popen()使用詳解
  • 解決python subprocess參數shell=True踩到的坑

標簽:赤峰 陽泉 金華 日照 臨汾 克拉瑪依 雙鴨山 貴州

巨人網絡通訊聲明:本文標題《Python中判斷subprocess調起的shell命令是否結束》,本文關鍵詞  Python,中,判斷,subprocess,調起,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python中判斷subprocess調起的shell命令是否結束》相關的同類信息!
  • 本頁收集關于Python中判斷subprocess調起的shell命令是否結束的相關信息資訊供網民參考!
  • 推薦文章
    欧美大片aaaa一级毛片| 成人免费高清视频| 国产成人啪精品视频免费软件| 国产一区精品| 国产成人精品一区二区视频| 欧美激情一区二区三区在线 | 天天色成人网| 黄色福利| 午夜精品国产自在现线拍| 美女被草网站| 91麻豆国产| 国产成+人+综合+亚洲不卡| 国产亚洲免费观看| 精品视频一区二区| 亚欧成人乱码一区二区| 一级女性大黄生活片免费| 高清一级片| 欧美另类videosbestsex高清| 日韩一级黄色大片| 欧美激情在线精品video| 亚洲 国产精品 日韩| 日日日夜夜操| 国产成人精品综合在线| 午夜精品国产自在现线拍| 午夜激情视频在线观看| 青青久久精品| 国产a一级| 成人免费一级毛片在线播放视频| 青青久久国产成人免费网站| 免费国产在线视频| 久草免费在线色站| 九九精品影院| 韩国三级视频网站| 91麻豆精品国产片在线观看| 日本在线不卡视频| 精品在线观看一区| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 黄色免费三级| 国产一区二区精品久久| 九九九国产| 91麻豆精品国产高清在线| 午夜在线影院| 四虎影视库| 欧美日本免费| 日韩在线观看免费| 欧美国产日韩一区二区三区| 精品久久久久久免费影院| 久久国产影视免费精品| 免费一级片在线| 999精品影视在线观看| 免费一级片在线观看| 国产视频在线免费观看| 国产亚洲精品成人a在线| 国产精品自拍在线| 精品在线免费播放| 亚洲 激情| 久久国产精品永久免费网站| 亚洲 欧美 成人日韩| 精品视频免费观看| 沈樵在线观看福利| 国产一区二区精品尤物| 青青青草影院| 毛片的网站| 99久久精品费精品国产一区二区| 一级女性大黄生活片免费| 亚欧成人乱码一区二区| 国产亚洲精品aaa大片| 成人在免费观看视频国产| 四虎论坛| 久久久成人影院| 精品视频在线看| 高清一级片| 高清一级淫片a级中文字幕| 九九干| 久久精品成人一区二区三区| 日韩在线观看视频黄| 欧美激情一区二区三区视频 | 精品视频在线观看免费| 天天做日日爱| 国产亚洲免费观看| 色综合久久天天综线观看| 欧美一区二区三区在线观看| 午夜欧美成人香蕉剧场| 国产网站免费观看| 欧美激情一区二区三区在线| 午夜精品国产自在现线拍| 91麻豆精品国产高清在线| 日韩一级黄色大片| 亚洲天堂在线播放| 99久久精品国产麻豆| 国产国语对白一级毛片| 精品视频一区二区三区| 亚洲 激情| 国产激情一区二区三区| 国产网站在线| 欧美国产日韩精品| 久久99爰这里有精品国产| 在线观看成人网| 国产高清在线精品一区二区| 亚洲天堂在线播放| 国产不卡在线观看| 国产不卡在线看| 青青青草视频在线观看| 精品视频在线观看免费| 午夜在线影院| 国产综合成人观看在线| 国产国语对白一级毛片| 日韩字幕在线| 国产视频一区二区在线播放| 久久99中文字幕久久| 精品视频在线观看一区二区| 亚久久伊人精品青青草原2020| 欧美激情一区二区三区在线 | 国产成a人片在线观看视频| 亚洲天堂免费| 成人av在线播放| 精品国产香蕉伊思人在线又爽又黄| 久久99中文字幕| 国产成人精品综合| 日本特黄特黄aaaaa大片| 日日夜夜婷婷| 欧美激情在线精品video| 国产不卡在线看| 国产视频一区二区在线观看| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 精品国产亚一区二区三区| 99久久精品国产国产毛片| 麻豆午夜视频| 91麻豆国产福利精品| 欧美激情一区二区三区视频 | 毛片高清| 天天色色色| 精品久久久久久中文| 99久久视频| 欧美a级片免费看| 成人av在线播放| 国产成人精品综合在线| 欧美激情一区二区三区视频高清 | 国产视频一区在线| 欧美另类videosbestsex久久 | 沈樵在线观看福利| 欧美a级片免费看| 国产成人精品综合在线| 国产视频久久久| 沈樵在线观看福利| 免费国产一级特黄aa大片在线| 国产麻豆精品hdvideoss| 99久久网站| 日韩av片免费播放| 亚洲精品影院| 久草免费资源| 黄色福利片| 国产极品白嫩美女在线观看看| 久久久成人影院| 二级片在线观看| 一级女性全黄久久生活片| 一本高清在线| 沈樵在线观看福利| 国产91素人搭讪系列天堂| 可以免费看毛片的网站| 成人a大片高清在线观看| 国产91丝袜在线播放0| 91麻豆爱豆果冻天美星空| 九九久久99综合一区二区| 91麻豆爱豆果冻天美星空| 久草免费在线色站| 久久久成人影院| 午夜欧美成人久久久久久| 国产一区二区精品| 久久99欧美| 日韩专区第一页| 欧美电影免费看大全| 一 级 黄 中国色 片| 毛片的网站| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 精品视频在线看 | 国产不卡在线看| 久久国产一久久高清| 日韩在线观看网站| 日韩在线观看网站| 国产欧美精品| 999精品影视在线观看| 午夜激情视频在线播放| 91麻豆精品国产自产在线| 国产伦精品一区三区视频| 国产一区二区精品尤物| 九九久久99| 天天做日日干| 精品在线观看国产| 亚欧成人乱码一区二区| 高清一级做a爱过程不卡视频| 日本在线播放一区| 国产成人欧美一区二区三区的| 成人免费高清视频| 黄视频网站免费观看| 国产伦久视频免费观看视频| 天堂网中文在线| 高清一级淫片a级中文字幕| 四虎久久影院| 高清一级做a爱过程不卡视频|