我正在尝试编写一个函数,如果这样的流作为参数给出,它将数据结构打印到流中,否则它会将其打印到 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)