出力を会話ツールにリダイレクトしてstderrを取得する

出力を会話ツールにリダイレクトしてstderrを取得する

リンクを取得するためにPythonファイルを使用していますが、それには時間がかかり、印刷され、通常、リンクは次のように33stderr66100印刷されます。sys.write.stderr(var)

今このコマンドを実行したいと思います。python file.py | dialog --gauge "Doing stuffs" 10 35 0

stdout(更新率の場合は33、66、100)をパイプして変数のsterrを測定してインポートしたいと思います。

{ 
    python3 file.py 2>&3 | dialog --gauge "Doing stuffs" 10 35 0; 
} 3>&1

このコマンドはダイアログボックスを正しく実行してからstderrを出力しますが、サブシェルで実行しないと出力を取得できません。ただし、これを行うとダイアログボックスが消えます。

ベストアンサー1

最も簡単な方法は、標準エラーをファイルに保存し、スクリプトが完了した後にそのファイルの内容を変数に割り当てることです。

python file.py 2> ErrorFile | dialog --gauge "Doing stuffs" 10 35 0
MY_STDERR=$(<ErrorFile)

中間ファイルを使用したくない場合は、ここに別の方法があります。この回答、指示も見ることができます):

{ MY_STDERR="$( { python file.py | dialog --gauge "Doing stuffs" 10 35 0; } 2>&1 1>&3 3>&- )"; } 3>&1;

おすすめ記事