ファイルからPythonスクリプトに入力をリダイレクトできませんでしたが、パイプを使用すると機能します。

ファイルからPythonスクリプトに入力をリダイレクトできませんでしたが、パイプを使用すると機能します。

このPythonスクリプトがあります。postpycess.pyグリッドファイルからのデータのプロットairfoil.p3d。スクリプトはパラメータなしで入力を処理するように設計されているため、入力ファイルを作成してcommands.txtスクリプトにリダイレクトしました。

コマンド.txt:(最初の入力は翼の名前で、拡張子なしで提供する必要があります.p3d。)

airfoil
1
1
q
q

Windowsでは、次のように実行できます。

python postpycess.py < commands.txt

しかし、残念ながらUbuntu 20.04でコマンドを実行するとスクリプトは失敗します。

The current working dir: /tmp/allworks/python/mwe

This is Postpycess, the CFD postprocessor
Version: 1.1
.p3dr project name: Error: can't read the file airfoil

ただし、以下はファイルにのみ適用されます。

printf 'airfoil\n1\n1\nq\nq\n' | python postpycess.py

私はPythonスクリプトで原因を絞り込み、成功せずに同じ問題を再現する最小の例を作成しようとしました。

Linuxでファイル入力リダイレクトが失敗する理由を説明できますか?

ご協力ありがとうございます。

ベストアンサー1

あなたの行はcommands.txt(Unixスタイル)ではなく(Windowsスタイル)で終わることがあります。\r\n\n

ちょうどUnixに変換するsed -i 's/\r//' commands.txtか、スクリプトをsed 's/\r//' commands.txt | python postpycess.py

おすすめ記事