Python版本的freopen()

Qui*_*tic 11 c c++ python file-io file

python中有什么东西可以在C或C++中复制freopen()的功能吗?确切地说,我想复制以下功能:

freopen("input.txt","r",stdin);
Run Code Online (Sandbox Code Playgroud)

freopen("output.txt","w",stdout);
Run Code Online (Sandbox Code Playgroud)

然后对文件I/O使用相同(标准)的控制台I/O函数.有任何想法吗?

For*_*veR 10

sys.stdout只是file对象,因此,您可以将其重新打开到另一个目的地

out = sys.stdout
sys.stdout = open('output.txt', 'w')
// do some work
sys.stdout = out
Run Code Online (Sandbox Code Playgroud)

out仅用于sys.stdout在工作之后将目的地恢复到默认值(如Martijn Pieters所建议 - sys.__stdout__如果您不需要它,您可以通过使用或根本不恢复来恢复它).


Mar*_*cus 6

如果您正在使用*nix平台,您可以自己编写freopen.

def freopen(f,option,stream):
    import os
    oldf = open(f,option)
    oldfd = oldf.fileno()
    newfd = stream.fileno()
    os.close(newfd)
    os.dup2(oldfd, newfd)

import sys
freopen("hello","w",sys.stdout)

print "world"
Run Code Online (Sandbox Code Playgroud)


小智 6

尝试这个:

import sys
sys.stdin = open('input.txt', 'r') 
sys.stdout = open('output.txt', 'w')
Run Code Online (Sandbox Code Playgroud)

文本文件不言自明。现在,您可以在Sublime Text或任何其他文本编辑器上运行此代码。