[英]Is it possible to have an alias for sys.stdout in python?
考虑一下此示例python代码。 它从stdin读取并写入文件。
import sys
arg1 = sys.argv[1]
f = open(arg1,'w')
f.write('<html><head><title></title></head><body>')
for line in sys.stdin:
f.write("<p>")
f.write(line)
f.write("</p>")
f.write("</body></html>")
f.close()
假设我想修改该程序以写入stdout。 然后,我必须用sys.stdout.write()
替换f.write()
每个实例。 但这太乏味了。 我想知道是否有一种方法可以将f
指定为sys.stdout
的别名,以便将f.write()
视为sys.stdout.write()
。
Python中的名称只是绑定。 因此:
f = sys.stdout
只需将名称f
绑定到也绑定到sys.stdout
的对象 上即可。
请注意,由于它们都是同一个对象,因此您此时对f
或sys.stdout
所做的任何更改都会影响这两者 。因此,请不要执行f.close()
因为您通常不希望执行sys.stdout.close()
...
做就是了
>>> import sys
>>> f = sys.stdout
>>> f.write('abc')
abc
现在,您只需要执行f = sys.stdout
而不是f = open(fileName)
。 (并删除f.close()
)
另外 ,请考虑对文件使用以下语法。
with open(fileName, 'r') as f:
# Do Something
这样,文件将自动为您关闭。
是的,在python中,您可以为每个类/函数/方法等添加别名。只需将要使用的值分配给另一个变量:
import sys
f = sys.stdout
现在,您在f
上调用的每个方法都将在sys.stdout
上调用。 您可以使用自己喜欢的任何方式执行此操作,例如,也可以使用i = sys.stdin
等。
无论如何,这完全是shell的工作。 只需将其发送到标准输出,然后在调用脚本时使用>filename
将其重定向到文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.