zoukankan      html  css  js  c++  java
  • redirecting python's "print" statements to a file

    http://stefaanlippens.net/redirect_python_print

    redirecting python's "print" statements to a file

    7 October, 2005 - 12:05
    Categories:

    Something I find annoying about writing a program/script that writes to text files is that you explicitly have to write the linefeeds (things like "\n", "\r", "\r\n" or std::endl). I remember Pascal having something like a writeln() function, which was very handy when I spend my time programming in TurboPascal, but it's no real incentive at all to return to the "begin...end" mess of Pascal. Apparently java has a writeln function too.

    In Python you have the print statement, which also silently appends a linefeed (unless you end the statement with a comma). The default behaviour of print is to write to the standard output, but you can redirect this to files or other writable objects (technically all objects that have a write method). That way you can use short, simple and clear print statements instead of those cluttered object.write( "wello horld" + "\n") constructs.

    The first technique is based on redirecting sys.stdout by assigning a writable object (such as a file object) to it. The print statements that follow will write to that object, instead of the default standard output. The drawback is that you should remember to reset sys.stdout to sys.__stdout__ if you want your default standard output back.

    The second technique came to my attention when I reread Learning Python for the second time. It involves redirecting the print statement directly as follows:

    print >>output, "wello horld"

    in which output is a writable object.

    As an illustration, consider the following script:

    #!/usr/bin/python
    import sys
     
    # a simple class with a write method
    class WritableObject:
        def __init__(self):
            self.content = []
        def write(self, string):
            self.content.append(string)
     
    # example with redirection of sys.stdout
    foo = WritableObject()                   # a writable object
    sys.stdout = foo                         # redirection
    print "one, two, three, four"            # some writing
    print "little hat"
    print "little hat"
    sys.stdout = sys.__stdout__              # remember to reset sys.stdout!
    print "foo's content:", foo.content                # show the result of the writing
     
    # example with redirection of the print statement
    bar = WritableObject()                   # another writable object
    print >>bar, "one, two, three, four"     # some (redirected) writing
    print >>bar, "little hat made of paper"
    print "bar's content:", bar.content                # the result

    the output of this script is

    foo's content: ['one, two, three, four', '\n', 'little hat', '\n', 'little hat', '\n']
    bar's content: ['one, two, three, four', '\n', 'little hat made of paper', '\n']

    In a more real life situation (for example with file objects to write to), this can be very handy and keeps you code cleaner and more human readable.

  • 相关阅读:
    超能英雄第一至四季/全集Heroes迅雷下载
    吸血鬼猎人巴菲第一至八季/全集Buffy迅雷下载
    明星伙伴第一至八季/全集Entourage迅雷下载
    实习医生风云第一至九季/全集Scrubs迅雷下载
    阿里云linux图形界面(centos6)
    linux下mysql的root密码忘记解决方
    wdcp支持两种安装方式
    如何搭建lamp(CentOS7+Apache+MySQL+PHP)环境
    丑女贝蒂第一至四季/全集Ugly Betty迅雷下载
    云服务器 ECS Linux 系统安装图形化桌面 (centos7 ubuntu14)
  • 原文地址:https://www.cnblogs.com/lexus/p/1845307.html
Copyright © 2011-2022 走看看