Bash 重定向stderr并保留stdout
我想写一个Bash 重定向stderr并保留stdout,bash,stdout,stderr,Bash,Stdout,Stderr,我想写一个bash脚本,它应该调用几个python脚本。 在python脚本中有几个打印消息,我不允许更改这些消息。我想将计算的最终状态解析到bash脚本中,以决定下一步要做什么。 我的计划是构建python文件,如下所示: 导入系统 print('这只是脚本中的一些打印消息') print('这只是脚本中的一些打印消息') sys.stderr.write('0或1表示错误或成功') 并重定向bash脚本中的stderr(但仍在终端上保留print函数的输出) errormessage=“$
bash
脚本,它应该调用几个python
脚本。
在python
脚本中有几个打印消息,我不允许更改这些消息。我想将计算的最终状态解析到bash脚本中,以决定下一步要做什么。
我的计划是构建python
文件,如下所示:
导入系统
print('这只是脚本中的一些打印消息')
print('这只是脚本中的一些打印消息')
sys.stderr.write('0或1表示错误或成功')
并重定向bash脚本中的stderr
(但仍在终端上保留print
函数的输出)
errormessage=“$(仅用于重定向的python pyscript.py命令)”
有人能帮我重定向stderr
?我找到的所有解决方案都不会保持print
函数的输出(大多数人将stdout
设置为null)
而且:如果有人有一个更聪明(和稳定)的想法来交出计算结果,那将非常感激
预期输出:
pyscript.py
导入系统
print('这只是脚本中的一些打印消息')
print('这只是脚本中的一些打印消息')
sys.stderr.write('0或1表示错误或成功')
bashscript.sh
#/bin/bash
LINE=“++++++++++++++++++++++++++++++++++++++++++++”
errormessage=“$(python pyscript.py命令\u仅用于重定向\u stderr\u)”
回音$线
echo“错误变量为${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
您可以交换stderr和stdout,并将stderr存储在一个变量中,您可以在脚本末尾回显该变量。 因此,请尝试以下方法:
#!/bin/bash
line="+++++++++++++++++++++++++"
python pyscript.py 3>&2 2>&1 1>&3 | read errormessage
echo "$line"
echo "Error variable is ${errormessage}"
这将正常打印stdout,并在末尾打印stderr。您可以交换stderr和stdout,并将stderr存储在一个变量中,您可以在脚本末尾回显该变量。 因此,请尝试以下方法:
#!/bin/bash
line="+++++++++++++++++++++++++"
python pyscript.py 3>&2 2>&1 1>&3 | read errormessage
echo "$line"
echo "Error variable is ${errormessage}"
这应该像平常一样打印你的stdout,并在最后打印stderr。也许我在监督某些东西,但在建议的答案中,当你想将stderr重定向到一个变量并将stdout保留在终端上时,正好缺少了这种情况。这已经得到了回答,也许我在监督某些东西,但他们在建议的答案中有当您希望将stderr重定向到变量并将stdout保留在终端上时,正好缺少这种情况。此问题已得到回答,谢谢您的回答!不幸的是,当我运行脚本时,$errormessage变量是空的。很抱歉,您必须删除(python pyscript.py 3>&2>&1 1>&3)周围的括号,因为它仍然是空的。。。但是errormessage=$(python pyscript.py 3>&22>&11>&3)可以工作。。。非常感谢
阅读
,在管道末端,可以在子外壳中运行。这是一个常见问题;谢谢你的回答!不幸的是,当我运行脚本时,$errormessage变量是空的。很抱歉,您必须删除(python pyscript.py 3>&2>&1 1>&3)周围的括号,因为它仍然是空的。。。但是errormessage=$(python pyscript.py 3>&22>&11>&3)可以工作。。。非常感谢阅读
,在管道末端,可以在子外壳中运行。这是一个常见问题;