PlatformIOのESP-IDFモードで開発したプログラムで、printf(“\n”)を使い出力した結果をファイルで保存したら、改行コードがおかしくなってしまった。
PlatformIOの環境設定
以下のような環境でプログラムを構築、シリアルモニタでファイル化している。
ファイルかはmonitor_filtersのlog2fileを使っている。
platformio.iniの内容
[env:esp32dev] platform = espressif32 board = esp32dev framework = espidf monitor_speed = 115200 monitor_filters = log2file, default |
sdkconfigの内容(抜粋)
CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y |
実際の出力内容
VSCodeのターミナル上は以下のような形で表示される。
特に問題ない。
ファイルに出力されたものを見ると以下のような形で表示される。
余計な改行が入っている。
このファイルの改行部分をバイナリダンプすると、以下のようなコードになっていた。
0x0D, 0x0D, 0x0A |
つまり、<CR><CR><LF>といった感じか。
一応、設定上は<CR><LF>で出しているはずなのだが、ファイルに落とされた時点で<CR>が付与されているようだった。
ファイルへの保存方法
シリアルモニタの結果をファイルに保存する処理は、log2file.pyというフィルタを使用しているよだった。
このファイルは、PlatformIOのインストール先のplatformio\penv\Lib\site-packages\platformio\commands\device\filters\log2file.pyにある。
中身を見てみると、Pythonのioを使い、ファイルにwriteしているようだった。
対応方法
log2file.pyのio.openの引数に、newline=”を追加するだけで、とりあえず余計な<CR>が付与されることはなくなった。
疑問点として、この件、検索して探してみたのだが、情報が全く上がってこなかった。
ということは、私の環境の問題なのだろうか。
インストールされているPythonに問題があるのか?
コメント
通りすがりのものです。
私も同様の事象でこまっていました。同様に修正して改行がなくりりました。ありがとう👍