2013-05-16 3 views
8

C 또는 C++에서 freopen()의 기능을 복제 할 수있는 것이 있습니까?freopen()의 Python 버전

freopen("input.txt","r",stdin); 

freopen("output.txt","w",stdout); 

그리고 파일 I/O에 대한 콘솔 I/O에 대해 동일한 (표준) 기능을 사용 : 정확히 말하면, 나는의 기능을 복제 할. 어떤 아이디어? sys.__stdout__를 사용하여 당신이 그것을 복구 할 수 있습니다 -

+0

: [파이썬에서 파일을 표준 출력을 리디렉션?] (http://stackoverflow.com/q/4675728/4279) – jfs

답변

8

sys.stdout

out = sys.stdout 
sys.stdout = open('output.txt', 'w') 
// do some work 
sys.stdout = out 

out 만 마티 피에 터스를 제안 (작업 후 기본값으로 sys.stdout 대상을 복구하는 또 다른 목적지로 다시 열 수 있습니다, 단순히 file 객체이기 때문에, , 또는 필요하지 않으면 전혀 복구하지 않음).

+0

'sys.stdin'는 대응이다 독서를위한 버전? – Quixotic

+0

@Quixotic yes, sys.stdin 및 'r' – ForEveR

+0

다시 필요할 경우를 대비하여'old = sys.stdout'을 사용하는 것도 좋은 생각입니다. – jamylak

4

* nix 플랫폼에서 작업하는 경우 자신의 freopen을 작성할 수 있습니다.

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" 
3

또한 일시적으로 리디렉션 contextlibcontextmanager 장식을보고 할 수 있습니다

import sys 
sys.stdin = open('input.txt', 'r') 
sys.stdout = open('output.txt', 'w') 

텍스트 파일은 자체 설명입니다. 이 코드는 Sublime Text 또는 다른 텍스트 편집기에서 실행할 수 있습니다.

0

이 시도 :

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" 
0

이 도움이 될 것입니다 관련

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")