[英]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
。 它沒有捕獲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
>
部分原因是 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.