是否存在sys.stdout.write()比print更可取的情况?
(例子:更好的性能;更有意义的代码)
是否存在sys.stdout.write()比print更可取的情况?
(例子:更好的性能;更有意义的代码)
当前回答
>>> sys.stdout.write(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: expected a string or other character buffer object
>>> sys.stdout.write("a")
a>>> sys.stdout.write("a") ; print(1)
a1
观察上面的例子:
Sys.stdout.write不会写入非字符串对象,但print会 Sys.stdout.write最后不会添加新的行符号,但print会
如果我们深潜,
sys。Stdout是一个文件对象,可用于print()的输出
如果未指定print()的文件参数,则sys。将使用Stdout
其他回答
下面是一些基于Mark Lutz的《Learning Python》一书的示例代码,它可以解决你的问题:
import sys
temp = sys.stdout # store original stdout object for later
sys.stdout = open('log.txt', 'w') # redirect all prints to this log file
print("testing123") # nothing appears at interactive prompt
print("another line") # again nothing appears. it's written to log file instead
sys.stdout.close() # ordinary file object
sys.stdout = temp # restore print commands to interactive prompt
print("back to normal") # this shows up in the interactive prompt
在文本编辑器中打开log.txt将显示以下内容:
testing123
another line
当动态打印有用时,例如,在一个较长的过程中提供信息:
import time, sys
Iterations = 555
for k in range(Iterations+1):
# Some code to execute here ...
percentage = k / Iterations
time_msg = "\rRunning Progress at {0:.2%} ".format(percentage)
sys.stdout.write(time_msg)
sys.stdout.flush()
time.sleep(0.01)
在Python 3中,使用sys.stdout进行打印是有正当理由的。写,但是这个原因也可以变成使用sys.stdout.write的原因。
这个原因是,现在print是python3中的一个函数,你可以重写它。所以你可以在一个简单的脚本中到处使用print,并决定这些print语句需要写入到stderr。你现在可以重新定义打印函数,你甚至可以通过使用内置模块改变打印函数全局。偏离了轨道。写可以指定文件是什么,但通过覆盖打印,还可以重新定义行分隔符或参数分隔符。
反之亦然。也许您完全确定写入到stdout,但也知道要将打印更改为其他内容,您可以决定使用sys.stdout。写,并使用打印错误日志或其他东西。
所以,你使用什么取决于你打算如何使用它。打印更灵活,但这可能是使用或不使用它的原因。我还是会选择比较灵活的款式,选择印花。另一个使用印刷版的原因是熟悉。现在更多的人知道你说的print是什么意思,而更少的人知道sys.stdout.write。
我的问题是是否有 在这些情况下 Sys.stdout.write()更可取 打印
有一天,在完成一个脚本的开发后,我把它上传到unix服务器上。我的所有调试消息都使用打印语句,这些语句不会出现在服务器日志中。
在这种情况下,您可能需要sys.stdout.write来代替。
在Python 2中,如果你需要传递一个函数,那么你可以将os.sys.stdout.write赋值给一个变量。你不能这样做(在REPL)打印。
>import os
>>> cmd=os.sys.stdout.write
>>> cmd('hello')
hello>>>
这和预期的一样。
>>> cmd=print
File "<stdin>", line 1
cmd=print
^
SyntaxError: invalid syntax
这是行不通的。印刷是一种神奇的功能。