在python 2中,如何编写一个函数,默认情况下打印到stdout,否则打印到参数流



我正在尝试编写一个函数,如果这样的流作为参数给出,它将数据结构打印到流中,否则它会将其打印到 stdout。也就是说,我想写一些类似以下内容的内容:

def printStructure(struct, stream = stdout):
  for e in struct.element:
    print >> stream, struct

因此,如果未给出第二个参数,则该函数将在屏幕上打印,并以其他方式打印stream。标准输出流在 python 中有名字吗?还有其他选择吗?

非常感谢!

代码和简单的演示在这里:

#! /usr/bin/env python
# -*- coding: utf-8 -*-
import sys

def printStructure(struct, stream=sys.stdout):
    if stream != sys.stdout:
        sys.stdout = stream
        print struct
    else:
        print struct
if __name__ == "__main__":
    printStructure("Print to file: 0", open('out.log', 'w'))
    printStructure("Print to console: 1")
    printStructure("Print to file: 1", open('out.log', 'aw'))
    printStructure("Print to file: 2", open('out.log', 'aw'))
    printStructure("Print to console: 2")

print() 函数已经内置了此功能。

蟒蛇 3

stream = open("myfile.txt", "w")
print("Some text", out=stream) # prints "Some text" to myfile.txt
print("Some text") # prints "Some text" to stdout

蟒蛇 2

对于 Python 2,为了启用打印功能,您需要在脚本顶部添加以下行:

from __future__ import print_function

之后,步骤是相同的

为了实现你想要的,你可以使用 sys.stdout .它是与解释器的标准输出流对应的文件对象,用于打印输出。
所以以同样的方式做

print >> stream, struct

要打印到文件,您只需执行以下操作:

print >> sys.stdout, struct

以打印到标准输出。

您也可以将sys.stdout临时"重定向"到文件:

>>> import sys
>>> oldSysStdout = sys.stdout #store original stdout object for later
>>> sys.stdout = open('someFile.log','w') #redirect all prints to this log file
>>> print "test1" #nothing is printed at the screen
>>> sys.stdout.close()
>>> sys.stdout=oldSysStdout 
>>> print "test2"
test2 #normal printing
>>>
~$ cat someFile.log
test1

请注意,在 python3.x 或 from __future__ import print_function 中,print 函数有一个参数,默认情况下sys.stdout

 print(*objects, sep=' ', end='n', file=sys.stdout)

相关内容

  • 没有找到相关文章

最新更新