Python 抑制 grep 不匹配退出状态
Python supress grep no match exit status
我有一个 python 脚本,它运行了几次检查。其中一项检查是通过对关键字执行 grep 并确认没有输出来确保结果不包含关键字。阅读 grep 手册页,预期的退出代码是 1。但是从用户的角度来看,检查通过了,因为关键字不存在。有没有一种方法可以 return 退出状态 0 for grep with no match commands 所以它不作为异常处理或任何其他方式来避免它被作为异常处理?请注意,用户将创建命令文件,因此我无法完全避免使用 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'))
输出:
SHELL=/bin/bash
Command 'env | grep test' returned non-zero exit status 1 b''
grep 示例 return 在不匹配后退出 1,正常行为:
$ env | grep test
$ echo $?
1
抑制 grep 的 return 值并强制为 0 退出状态的示例:
$ env | { grep test || true; }
$ echo $?
0
试试这个。希望对你有帮助。
我有一个 python 脚本,它运行了几次检查。其中一项检查是通过对关键字执行 grep 并确认没有输出来确保结果不包含关键字。阅读 grep 手册页,预期的退出代码是 1。但是从用户的角度来看,检查通过了,因为关键字不存在。有没有一种方法可以 return 退出状态 0 for grep with no match commands 所以它不作为异常处理或任何其他方式来避免它被作为异常处理?请注意,用户将创建命令文件,因此我无法完全避免使用 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'))
输出:
SHELL=/bin/bash
Command 'env | grep test' returned non-zero exit status 1 b''
grep 示例 return 在不匹配后退出 1,正常行为:
$ env | grep test
$ echo $?
1
抑制 grep 的 return 值并强制为 0 退出状态的示例:
$ env | { grep test || true; }
$ echo $?
0
试试这个。希望对你有帮助。