У меня есть следующий блок кода в функции Python 3
try:
score_string = subprocess.check_output([sys.executable, "-m", "query",
lab,
data_frame_path,
prior_model_path,
channel], stderr=subprocess.PIPE).decode('utf-8')
except subprocess.CalledProcessError as e:
out_bytes = e.output # Output generated before error
err_bytes = e.stderr
code = e.returncode # Return code
if log:
log.error("Invocation of train_model on %s %s %s failed with error %d." %
(lab, data_frame_path, prior_model_path, code))
log.error("Error output is:")
log.error(out_bytes.decode('utf-8'))
if err_bytes is not None:
log.error(err_bytes.decode('utf-8'))
return None
return eval(score_string)
Однако, когда он обнаруживает ошибку в подпроцессе, он не печатает ничего из вывода, который при stderr
.Все, что я вижу:
2019-02-18 17:29:18 ERROR Invocation of train_model on Transcriptic ../data/pipeline/experiment.r1bbm2c4eyvsp_amazed-sponge_mefl_hist\
.csv ../data/trained/pipeline_mefl_hist/ failed with error 1.
2019-02-18 17:29:18 ERROR Error output is:
2019-02-18 17:29:18 ERROR
Я подозреваю, что есть какая-то проблема с тем, как я вызываю check_output
, и в частности аргумент stderr
.Я прочитал документацию, но не смог ее понять.Я считаю, что должен сделать что-то , чтобы захватить stderr
, чтобы вставить его в CalledProcessError
, но я не знаю, что правильно делать.