bashスクリプトでは、次のように書くことができます。
exec 2>&1
exec someprog
そして、のstderr出力はsomeprog
stdoutにリダイレクトされます。
os.exec*
Pythonの関数を使用して同様のことを行う方法はありますか?
これはポータブルである必要はなく、Linuxで動作するだけです。
bashスクリプトでは、次のように書くことができます。
exec 2>&1
exec someprog
そして、のstderr出力はsomeprog
stdoutにリダイレクトされます。
os.exec*
Pythonの関数を使用して同様のことを行う方法はありますか?
これはポータブルである必要はなく、Linuxで動作するだけです。
/bin/ls
stderrに文句を言うように、偽の引数で実行しましょう。
$ python -c "import os; os.execl('/bin/ls', '', 'ffweew')" 1>/dev/null : ffweew: そのようなファイルまたはディレクトリはありません $ python -c "import os; os.execl('/bin/ls', '', 'ffweew')" 2>/dev/null $ python -c "import os; os.dup2(1, 2); os.execl('/bin/ls', '', 'ffweew')" 1>/dev/null $ python -c "import os; os.dup2(1, 2); os.execl('/bin/ls', '', 'ffweew')" 2>/dev/null : ffweew: そのようなファイルまたはディレクトリはありません $
ls
最初の 2 つの呼び出しは、 が stdout に書き込まないことを証明し、エラー メッセージを stderr に書き込みます。
3 回目と 4 回目の呼び出しで、Python プログラムはファイル記述子 1 をファイル記述子 2 として複製し、目的の効果を達成します。