2013-05-16 76 views
8

Có điều gì trong python có thể sao chép chức năng của freopen() trong C hoặc C++ không? Để được chính xác, tôi muốn tái tạo các chức năng của:Phiên bản Python của freopen()

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

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

Và sau đó sử dụng (tiêu chuẩn) cùng chức năng cho giao diện điều khiển I/O cho tập tin I/O. Bất kỳ ý tưởng?

+0

liên quan: [Chuyển stdout vào một tập tin bằng Python?] (Http://stackoverflow.com/q/4675728/4279) – jfs

Trả lời

8

sys.stdout chỉ đơn giản là file đối tượng, vì vậy, bạn có thể mở lại nó đến đích khác

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

out chỉ cho việc khôi phục sys.stdout đích để mặc định sau giờ làm việc (như đề xuất Martijn Pieters - bạn có thể phục hồi nó bằng cách sử dụng sys.__stdout__ , hoặc không hồi phục chút nào, nếu bạn không cần nó).

+0

'sys.stdin' là tương ứng phiên bản để đọc? – Quixotic

+0

@Quixotic yes, sys.stdin và 'r' – ForEveR

+0

Cũng nên có 'old = sys.stdout' trong trường hợp bạn cần nó một lần nữa – jamylak

4

Nếu bạn đang làm việc trên nền tảng * nix, bạn có thể tự viết freopen của riêng mình.

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

Bạn cũng có thể muốn nhìn vào contextmanager trang trí trong contextlib tạm chuyển hướng:

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 

Ví dụ:

with opened(filename, "w") as f: 
    with stdout_redirected(f): 
     print "Hello" 
0

Hãy thử điều này:

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

Các tệp văn bản tự giải thích. Bây giờ bạn có thể chạy mã này trên Sublime Text hoặc bất kỳ trình soạn thảo văn bản nào khác.

0

Điều này sẽ giúp:

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") 
Các vấn đề liên quan