python中是否有任何可以在C或C++中复制freopen()的功能的东西?准确地说,我希望复制的功能:freopen的Python版本()
freopen("input.txt","r",stdin);
和
freopen("output.txt","w",stdout);
然后使用相同的(标准)功能控制台I/O的文件I/O。有任何想法吗?
python中是否有任何可以在C或C++中复制freopen()的功能的东西?准确地说,我希望复制的功能:freopen的Python版本()
freopen("input.txt","r",stdin);
和
freopen("output.txt","w",stdout);
然后使用相同的(标准)功能控制台I/O的文件I/O。有任何想法吗?
sys.stdout
简直是file
对象,所以,你可以将它重新打开到另一个目的地
out = sys.stdout
sys.stdout = open('output.txt', 'w')
// do some work
sys.stdout = out
out
只用于恢复sys.stdout
目的地工作之后恢复为默认(如建议的Martijn Pieters的 - 你可以恢复它使用sys.__stdout__
,或者根本不恢复,如果你不需要的话)。
如果您在* 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"
您可能也想看看contextmanager
装饰在contextlib
临时重定向:
from contextlib import contextmanager
import sys
@contextmanager
def stdout_redirected(new_stdout):
save_stdout = sys.stdout
sys.stdout = new_stdout
try:
yield
finally:
sys.stdout = save_stdout
例子:
with opened(filename, "w") as f:
with stdout_redirected(f):
print "Hello"
试试这个:
import sys
sys.stdin = open('input.txt', 'r')
sys.stdout = open('output.txt', 'w')
文本文件是自解释的。 您现在可以在Sublime Text或任何其他文本编辑器上运行此代码。
这应有助于:
import sys
def freopen(filename, mode):
if mode == "r":
sys.stdin = open(filename, mode)
elif mode == "w":
sys.stdout = open(filename, mode)
# ---- MAIN ----
freopen("input.txt", "r")
freopen("output.txt", "w")
相关:重定向标准输出到Python中的文件?(http://stackoverflow.com/q/4675728/4279) – jfs