質問: github から借りてきたコードを使っているのですが、途中でエラーが出てしまったため何が起きているのか確認しようと思い、随所に print() を書き加えました。 その後、実行をしてみたところ print() したものがターミナルに出力されませんでした。 この理由がわからないため、ありえる原因を教えていただけるとうれしいです。 何が起きているのかわからないため必要な情報が何かもわからないのですが、追加で有効そうな情報としては * コードに変更を加えた時にその変更は反映されている。 * エラーが起きないような状態で実行すれば、print()はターミナルに出力される。 ### 使っているコード ### コード実行の仕方 下のようにシェルスクリプトを書いています。 標準出力がどこかにパイプされているわけではありません。 ``` folder_path=/disk/n.n/mmt-emb-pred output_path=$folder_path/result/imagination/en-fr/original mkdir -p $output_path CUDA_VISIBLE_DEVICES=2 python bin/nmtpy train \ train.save_path:$output_path \ -C $folder_path/example/imagination.conf ```
回答: 標準出力はバッファリングされています。私はそんなにシェルの動作に詳しくはないですがバッファリング中にエラーが発生すると内容がコンソールに表示されず捨てられてしまうことがあります。 質問のようなデバッグプリントデータは標準エラー出力に出すようにすると良いかと思います。 通常、標準エラー出力はバッファリングされていません。 ``` import sys print(出力したい変数,file=sys.stderr) ``` バッファリングの状態を変更したい場合はsetbufコマンドで。