重定向标准错误并保留标准输出

时间:2019-08-09 13:32:46

标签: bash stdout stderr

我想编写一个bash脚本,该脚本应调用多个python脚本。 python脚本中有几条打印消息,不允许更改。我想将计算的最终状态解析到我的bash脚本中,以决定下一步要做什么。 我的计划是建立python文件,例如:

import sys

print('this is just some print messages within the script')
print('this is just some print messages within the script')

sys.stderr.write('0 or 1 for error or sucessfull')

并在bash脚本中重定向stderr(但仍将print函数的输出保留在终端上)

errormessage="$(python pyscript.py command_for_redirecting_stderr_only)"

有人可以帮助我仅重定向stderr吗?我发现的所有解决方案都不会保留print函数的输出(大多数人将stdout设置为null)。

而且:如果有人有一个更聪明(更稳定)的想法来交出计算结果,将不胜感激。

预期输出:

pyscript.py

import sys
print('this is just some print messages within the script')
print('this is just some print messages within the script')
sys.stderr.write('0 or 1 for error or sucessfull')

bashscript.sh

#!/bin/bash
LINE="+++++++++++++++++++++++++"
errormessage="$(python pyscript.py command_for_redirecting_stderr_only)"
echo $LINE
echo "Error variable is ${errormessage}"

我打bash bashscript.sh时的输出:

this is just some print messages within the script
this is just some print messages within the script
+++++++++++++++++++++++++
Error variable is 0/1

1 个答案:

答案 0 :(得分:2)

您可以交换stderr和stdout并将stderr存储在一个变量中,该变量可以在脚本结尾处回显。 所以尝试这样的事情:

#!/bin/bash
line="+++++++++++++++++++++++++"
python pyscript.py 3>&2 2>&1 1>&3 | read errormessage
echo "$line"
echo "Error variable is ${errormessage}"

这应该正常打印标准输出,并在最后打印标准错误。