как зафиксировать ошибку из subprocess.run python при использовании тайм-аута

Я не могу понять, как использовать subprocess.run python для захвата stdout, stderr и кода выхода... и всего, что еще можно захватить. Мне также приходится использовать опцию тайм-аута, потому что некоторые из тысяч команд, которые я запускаю, зависают, т. е. выполняются бесконечно. Бьюсь об заклад, я пропустил что-то очевидное, и я извиняюсь. Я потратил дни на это и не могу понять это.

Любая помощь, которую вы могли бы мне дать, была бы очень признательна.

Вот мой дефектный код:

seconds = timeout
try:
    proc = subprocess.run(cmd, capture_output=True, timeout=seconds)

except subprocess.TimeoutExpired:
    print('This process ran too long:\n' + cmd + '\n')
        
out, err = proc.communicate()
exitcode = proc.returncode

if len(out) == 0: out="''"
if len(err) == 0: err="''"
#
return exitcode, out, err

person Marc B. Hankin    schedule 15.10.2020    source источник


Ответы (1)


Ты почти там. Вместо

out, err = proc.communicate()

использовать

out, err = proc.stdout, proc.stderr

Что касается вашего исключения, я не уверен, сможете ли вы получить stdout, stderr и код возврата после тайм-аута. Дайте ему чек. Если нет, то рассмотрите return "", "", 1 или что-то подобное в вашем предложении исключения.

person MHankin    schedule 16.10.2020