Например так:
ERR = 'Warning: Unable to locate configuration directory, default config not loaded.'
try:
output = subprocess.check_output(args)
except subprocess.CalledProcessError as e:
sys.stderr.write(
'ERROR: call to mosquitto_pub failed with error code {}\n'.format(e.returncode))
else:
for line in output.decode('utf-8').split('\n'):
if err not in line:
print(line, file=sys.stderr)
Но учтите, в случае ошибки в этом варианте вы не получите вообще никакого выхлопа от вашего насекомого.
Если выхлоп нужен в реальном времени, то вы его тоже можете профильтровать. Чуть сложнее будет.
Придётся сделать фильтрующую прокси-обёртку для stderr, который подать сабпроцессу.
Также нужно с осторожностью отнестись к конвертации кодировки. вдруг там не utf-8 было. По-хорошему нужно сплитить бинарный выхлоп по абзацам и детектить строки в нём... или взять у пайпа кодировку попробовать.
НО! Я, вот, только что подумал, что это проще и лучше сделать со стороны баша. В командной строке где вы запускаете своего москита можно пайпом добавить тупой фильтр строк (хоть даже грепом).