Вы не можете не должны, потому что система резервирует коды выхода выше 128 для себя. Если код возврата от 0 до 127, это означает, что программа вышла сама. Если код возврата выше 128, это означает, что программа была прервана системным сигналом (например, SIGKILL или SIGTERM). Номер сигнала - код результата минус 128.
Вам нужно будет обнаружить это и сделать какой-то другой вид индикации вывода, я думаю. Возможно, выведите код возврата в STDOUT, а затем вернитесь либо с 0 (нормальный выход, нормальный вывод), либо с 1 (cmd имел ненулевое возвращаемое значение, выход означает что-то).
edit: Очевидно (из этого комментария ), Python умнее, чем сценарий оболочки ... Чтобы вернуть его в обычный код выхода Linux, попробуйте следующее:
subprocess_exit_code = (ret >> 8) & 0x7f
subprocess_signal_number = ret & 0xff
if subpprocess_signal_number == 0:
exit_code = subprocess_exit_code
else:
exit_code = 128 + subprocess_signal_number
Хотя это игнорирует информацию о дампе ядра.