前提・実現したいこと
Pythonで簡単なプログラムを作っています。
出力結果をlessコマンドにパイプする時に以下の問題が発生しました。
発生している問題
入力待ち状態の時、入力した文字が表示されない。
ただし、Enterを押下すると入力した文字をプログラムが正しく受け取る。
問題は、入力した文字が見えないことです。打った文字を正しく表示させたいです。
該当のソースコード
python
1f_name = input(">>") 2 3with open(f_name, "r") as f: 4 lines = f.readlines() 5 6[print (line.strip("\n")) for line in lines]
実行したコマンド
zsh
1python teratail.py | less
入力待機画面
zsh
1python teratail.py | less
・ここで何を入力してもターミナル上に文字が表示されることはないが、Enterを押下することで入力が完了し、それまで打った文字が正しく送られる。(この場合変数f_nameに代入される)
・表示されると思っていた">> "が表示されていない(コマンドの下にカーソルがきただけ)
試したこと
######パイプ先の変更
zsh
1❯ python teratail.py | wc 2test
パイプ先をwcコマンドに変更したら、入力した文字が表示されるようになった。
つまりlessにパイプすると入力した文字のターミナル上への表示までlessの対象になってしまっている。
不便なので、そうしない方法が知りたい。
######print()での表示
python
1print ("filename: ", file=sys.stderr)
print()での表示に関しては標準エラー出力にprintすることでlessの対象外とすることができた。
zsh
1❯ python teratail.py | less 2filename:
環境
Python 3.8.1
MacBook Pro (13-inch, 2016, Two Thunderbolt 3 ports)
Catalina 10.15.3
zsh 5.7.1 (x86_64-apple-darwin19.0)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。