これは、特にその答えに関するhereからのフォローアップの質問です。
Python モジュールから、単に標準出力に出力するHello WorldHello World
実行可能ファイルを呼び出しています。その出力をPythonにリダイレクトすることに興味があり、このStringIO
回答に出くわしました。これにより、ほとんど解決策にたどり着きました。
この回答の重要な部分は、次のコード セグメントです。
1. def redirect_stdout():
2. print "Redirecting stdout"
3. sys.stdout.flush() # <--- important when redirecting to files
4. newstdout = os.dup(1)
5. devnull = os.open('/dev/null', os.O_WRONLY)
6. os.dup2(devnull, 1)
7. os.close(devnull)
8. sys.stdout = os.fdopen(newstdout, 'w')
また、リダイレクト前の標準出力を復元したいと思います。
質問
- 上記の関数で正確に何が起こっているのでしょうか?
dup
とは何dup2
ですか?- とは
/dev/null
? - 8 行目は何をしているのですか? (
sys.stdout = os.fdopen(newstdout, 'w')
)
StringIO
stdout をオブジェクトに保存するにはどうすればよいですか?- Hello Worldプログラムを呼び出した後、stdout を復元するにはどうすればよいですか?
質問 1 の答えがわかれば、質問 2 と 3 の答えも簡単になると確信しています。とにかく投稿して、質問1の答えを自分の行きたい方向に押し進めることにしました。