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