【发布时间】:2012-02-06 23:02:42
【问题描述】:
我从一个 python 模块调用一个 Hello World 可执行文件,它只是将Hello World 打印到标准输出。我有兴趣将该输出重定向到 python StringIO 并遇到 this 答案,这几乎让我找到了解决方案。
这个答案的关键部分是这段代码:
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对象中? - 如何在调用我的 Hello World 程序后恢复标准输出?
我很确定,一旦我得到问题 1 的答案,问题 2 和 3 的答案就会很容易。无论如何,我决定发布它们,以便将问题 1 的答案推向我想去的方向。
【问题讨论】:
标签: python stdout io-redirection dup2 dup