2017-08-25 60 views
0

我有一個python腳本,通過幾次檢查。其中一項檢查是通過對關鍵字執行grep並確認沒有輸出來確保結果不包含關鍵字。讀取grep手冊頁的預期退出代碼是1.但從用戶角度來看,由於關鍵字不存在,所以通過檢查。有沒有辦法,我可以返回退出狀態0的grep與沒有匹配命令,所以它不被視爲異常或任何其他方式來處理它作爲異常處理?注意用戶將創建命令文件,所以我無法完全避免使用grep。Python supress grep不匹配退出狀態

import subprocess 


    def cmd_test(command): 
     try: 
      cmd_output = subprocess.check_output(command, 
               stderr=subprocess.STDOUT, 
               shell=True, 
               timeout=120, 
               universal_newlines=False).decode('utf-8') 
     except subprocess.CalledProcessError as exc: 
      return (exc) 
     else: 
      return cmd_output.strip() 

    print(cmd_test('env | grep bash')) 
    print(cmd_test('env | grep test')) 

print(cmd_test('env | grep bash')) 
print(cmd_test('env | grep test')) 

輸出:

的grep
SHELL=/bin/bash 
Command 'env | grep test' returned non-zero exit status 1 b'' 
+0

錯誤...只需檢查異常對象中的退出代碼?甚至直接使用'Popen'對象而不是'check_foo()' – o11c

回答

1

實施例不匹配之後返回的出口1,正常行爲:

$ env | grep test 
$ echo $? 
1 

抑制的grep的返回值和強制爲0退出狀態的實施例:

$ env | { grep test || true; } 
$ echo $? 
0 

試試這個。希望能幫助到你。

+0

您可以使用'! '運營商喜歡這裏:https://stackoverflow.com/questions/367069/how-can-i-negate-the-return-value-of-a-process – Arminius