如何重新打开文件描述符0,1和2?

时间:2013-04-28 15:16:04

标签: python read-eval-print-loop file-descriptor

在python REPL 中分别称为os.close 012 {{3} }。我怎样才能重新开启/重新初始化它们?这样我就会在函数或代码块的开头关闭它们,然后在返回之前重新打开它们。

PS:非常感谢python特定和通用细节。

1 个答案:

答案 0 :(得分:2)

您无法关闭它们然后重新打开它们,但是您可以复制它们并在完成后恢复之前的值。像这样的东西;

copy_of_stdin  = os.dup(0)  // Duplicate stdin  to a new descriptor
copy_of_stdout = os.dup(1)  // Duplicate stdout to a new descriptor
copy_of_stderr = os.dup(2)  // Duplicate stderr to a new descriptor
os.closerange(0,2)          // Close stdin/out/err

...redirect stdin/out/err at will...

os.dup2(copy_of_stdin,  0)  // Restore stdin
os.dup2(copy_of_stdout, 1)  // Restore stdout
os.dup2(copy_of_stderr, 2)  // Restore stderr
os.close(copy_of_stdin)     // Close the copies
os.close(copy_of_stdout)
os.close(copy_of_stderr)