7

考虑这个示例 python 代码。它从标准输入读取并写入文件。

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

假设我想修改这个相同的程序以写入标准输出。然后,我将不得不用 替换每个f.write()实例sys.stdout.write()。但这太乏味了。我想知道是否有办法指定f为 的别名sys.stdout,以便将f.write()其视为sys.stdout.write().

4

4 回答 4

15

Python 中的名称只是绑定。所以:

f = sys.stdout

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

请注意,由于它们都是同一个对象,因此您对fsys.stdout此时所做的任何更改都会影响两者......所以不要f.close()像通常不想做的那样做sys.stdout.close()......

于 2013-07-23T18:50:18.757 回答
11

做就是了

>>> import sys
>>> f = sys.stdout
>>> f.write('abc')
abc

现在你只需要 dof = sys.stdout而不是f = open(fileName). (并删除f.close()

另外,请考虑对文件使用以下语法。

with open(fileName, 'r') as f:
    # Do Something

通过这种方式,文件会自动为您关闭。

于 2013-07-23T18:46:12.373 回答
3

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

import sys
f = sys.stdout

现在,您调用的每个方法都f将被调用sys.stdout。你可以用任何你喜欢的东西来做这件事,例如也可以用i = sys.stdin等。

于 2013-07-23T18:47:32.580 回答
0

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

于 2013-07-23T19:16:17.193 回答