3

bashスクリプトでは、次のように書くことができます。

exec 2>&1
exec someprog

そして、のstderr出力はsomeprogstdoutにリダイレクトされます。

os.exec*Pythonの関数を使用して同様のことを行う方法はありますか?

これはポータブルである必要はなく、Linuxで動作するだけです。

4

1 に答える 1

5

os.dup2(1, 2)

イルミネーションの例

/bin/lsstderrに文句を言うように、偽の引数で実行しましょう。

$ 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 として複製し、目的の効果を達成します。

于 2010-02-22T09:30:08.583 に答える