相关疑难解决方法(0)

从python重定向stdout进行C调用

这是从一个跟进的问题在这里专门涉及了答案.


从python模块我调用一个Hello World可执行文件,只是打印Hello World到stdout.我有兴趣将该输出重定向到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')
Run Code Online (Sandbox Code Playgroud)

此外,我想恢复重定向之前的stdout.

问题

  1. 上面的函数究竟发生了什么?
    • 是什么dupdup2做什么?
    • 什么是/dev/null
    • 第8行在做什么?(sys.stdout = os.fdopen(newstdout, 'w'))
  2. 如何将stdout存储在StringIO对象中?
  3. 如何在调用Hello World程序后恢复标准输出?

我很确定,一旦我得到了问题1的答案,问题2和3的答案就很容易了.无论如何我决定发布它们可能会将问题1的答案推到我想去的方向.

python stdout io-redirection dup2 dup

9
推荐指数
2
解决办法
3869
查看次数

标签 统计

dup ×1

dup2 ×1

io-redirection ×1

python ×1

stdout ×1