首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在python或bash中处理\r\n命令输出

如何在python或bash中处理\r\n命令输出
EN

Stack Overflow用户
提问于 2018-08-18 05:30:23
回答 2查看 488关注 0票数 -3

我正在运行一个简单的bash脚本

var=$(script.sh)

script.sh的输出是这样的:

\r\n

123

ok

现在,当我这样做的时候:

echo $var它返回\r\n。它没有捕获123ok。我想让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
>
EN

回答 2

Stack Overflow用户

发布于 2018-08-18 09:51:37

部分原因是IFS和糟糕的输出。

以下是解决方法示例:

 script.sh > /tmp/file.log
 var=""
 while IFS= read -r line ;do
     [ -z "$line" ] && continue
     var="$line $var"
 done < "${file}"
 echo "$var"

基本上就是输出到一个文件,然后读取该文件并获取您真正需要的数据。等等。你的问题/code很难理解,这是我能想到的最好的办法了。

票数 0
EN

Stack Overflow用户

发布于 2018-08-18 13:37:26

在我看来,myscript.elf将其大部分输出发送到标准错误,而不是标准输出;因此,无论是$( )还是通过管道将其发送到while read循环都不能捕获它,它只是直接到达终端。如果要将错误输出合并到标准输出中,请将2>&1附加到命令中,如下所示:

var=$(myscript.elf 2>&1)

./myscript.elf parm1 parm2 2>&1 | while read -r line

顺便说一句,在你的变量(和文件)中使用回车符容易引起混淆,所以你可能想要这样删除它们:

var=$(myscript.elf 2>&1 | tr -d '\r')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51903109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档