簡體   English   中英

如何從 python 或 bash 中的命令輸出處理 \\r\\n

[英]How to handle \r\n from command output in python or bash

我正在運行一個簡單的 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
>

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

一個示例解決方法:

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

基本上輸出到一個文件,然后讀取該文件並獲取您真正需要的數據......等等.. PS> 你的問題/代碼很難理解,這是我能想到的最好方法。

在我看來,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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM