【发布时间】:2019-01-24 22:51:04
【问题描述】:
我正在运行一个简单的 bash 脚本
var=$(script.sh)
script.sh 的输出格式为:
\r\n
123
ok
现在当我这样做时:
echo $var 它返回\r\n。它没有捕获123 和ok。我希望var 获得整个输出。
在 python 中我尝试了同样的事情:
bashCommand = ./myscript.sh
process = Popen(bashCommand.split(), stdout=subprocess.PIPE)
output, error = process.communicate()
print("Output", output)
但即使在这里打印输出也会打印\r\n
如何捕获整个stdout?
更新:
这是我的 bash 脚本xyz.sh:
#! /bin/sh
set -x
./myscript.elf parm1 parm2 |{
while IFS= read -r line
do
echo "$line"
done
}
这是./xyz.sh的输出:
+ ./myscript.elf parm1 parm2
+ IFS=
+ read -r line
>123
OK
>+ echo $'\r'
+ IFS=
+ read -r line
如果只是在./myscript.elf parm1 parm2 行上运行命令,则输出如下:
./myscript.elf parm1 parm2
>123
OK
>
【问题讨论】:
-
其他内容实际上是打印到标准输出而不是标准错误吗?
-
我跑了
echo $var,得到了123 ok。我无法重现您的错误。 -
当你说
\r\n时,你的意思是反斜杠r反斜杠n,还是回车换行符? -
它的回车换行。 bash 认为它已到达命令末尾并在第一行停止。
-
我想知道命令行是否正在添加新行或者它实际上是你的程序。尝试先通过管道传输到文件,然后使用
xxd分析十六进制以确定其中是否实际存在新行。