是否可以在python中拥有sys.stdout的别名?

时间:2013-07-23 18:44:59

标签: 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。然后,我必须用f.write()替换sys.stdout.write()的每个实例。但那太繁琐了。我想知道是否有办法将f指定为sys.stdout的别名,以便将f.write()视为sys.stdout.write()

4 个答案:

答案 0 :(得分:14)

Python中的名称只是绑定。因此:

f = sys.stdout

只需将名称f绑定到对象也绑定sys.stdout ...

请注意,由于它们都是同一个对象,因此您在此时对fsys.stdout所做的任何更改都会影响两者 ...所以不要按照您通常不希望f.close() ... {/ p>进行sys.stdout.close()

答案 1 :(得分:11)

只做

>>> 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

文件会自动以这种方式关闭。

答案 2 :(得分:3)

是的,在python中,您可以为每个类/函数/方法等设置别名。只需将要使用的值分配给另一个变量:

import sys
f = sys.stdout

现在,f上调用的每个方法都会在sys.stdout上调用。您可以使用任何您喜欢的方式执行此操作,例如i = sys.stdin等。

答案 3 :(得分:0)

无论如何,这恰好是shell的工作;只需将其发送到标准输出并在调用脚本时使用>filename将其重定向到文件。