7
from sys import stdout
stdout = open('file', 'w')
print 'test'
stdout.close()

确实创建了文件,但它不包含任何内容。

我不得不使用

import sys
sys.stdout = open('file', 'w')
print 'test'
sys.stdout.close()

但是不会from ... import...自动使名称可用吗?为什么我仍然必须使用sys.stdout而不是stdout

4

1 回答 1

8

问题是这样的:print相当于sys.stdout.write().

因此,当您这样做时from sys import stdout,该变量stdout将不会被print.

但是当你这样做时

import sys
print 'test'

它实际上写入sys.stdout指向file您打开的哪个。

分析

from sys import stdout
stdout = open('file', 'w')
print 'test' # calls sys.stdout.write('test'), which print to the terminal
stdout.close()

import sys
sys.stdout = open('file', 'w')
print 'test' # calls sys.stdout.write('test'), which print to the file
sys.stdout.close()

结论

这有效...

from sys import stdout
stdout = open('file', 'w')
stdout.write('test')
stdout.close()
于 2013-01-27T06:12:46.810 回答