2017-08-25 4 views
0

私はいくつかのチェックを実行するpythonスクリプトを持っています。チェックの1つは、キーワードにgrepを実行し、出力がないことを確認して結果にキーワードが含まれていないことを確認することです。 grep manページを読むと、終了コードは1になります。しかし、ユーザーの観点からは、キーワードは存在しないので、チェックがパスされます。 grepの終了ステータス0をマッチコマンドなしで返すことができる方法はありますか?例外として扱われることはありませんか、例外として処理されないように他の方法で処理されますか?ユーザーがコマンドファイルを作成するので、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')) 

出力:なし試合後に1番出口を返すのgrepの

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

エラー...例外オブジェクトの終了コードをチェックするだけですか?あるいは、 'check_foo()'の代わりに 'Popen'オブジェクトを直接使うこともできます。 – o11c

答えて

1

例、正常な動作します。grepの戻り値を抑制し、0終了ステータスに強制の

$ env | grep test 
$ echo $? 
1 

例:

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

これを試してください。それが役に立てば幸い。

+0

'! '演算子はここにあります:https://stackoverflow.com/questions/367069/how-can-i-negate-the-return-value-of-a-process – Arminius

関連する問題