我正在尝试将输出重定向到文件
下面的代码工作正常
import sys
print('###################################Genarating Global Variables##########################')
storage_file = open("Storage-output.txt", 'w')
sys.stdout = storage_file
print ('whatever')
storage_file.close()
以下代码无效:
import sys
print('###################################Genarating Global Variables##########################')
storage_file = open("Storage-output.txt", 'w')
sys.stdout = storage_file
print ('what')
storage_file.close()
print('Completed Global variables creation')
基本上我需要的是,一些打印输出应该转到文件,一些打印输出应该显示在终端中。为此,我计划在脚本中根据需要打开文件并关闭文件。
答案 0 :(得分:1)
错误消息是自我解释的:
Traceback (most recent call last):
File "something.py", line 7, in <module>
print('Completed Global variables creation')
ValueError: I/O operation on closed file
您将文件处理程序分配给stdout:sys.stdout = storage_file
,但在最后storage_file
之前关闭了print
,这导致了此问题。如果您希望上一个print
再次像第一行一样工作,则需要重新将sys.stdout
分配给其原始值,顺便说一下,在处理文件时,请始终考虑使用{{1}声明:
with
答案 1 :(得分:0)
您正在关闭该文件,但您没有将sys.stdout更改回原始值;所以这一行print('Completed Global variables creation')
试图在storage_file中打印,这是一个封闭的文件描述符。
这样的事情应该有效。您还可以将原始值sys.stdout
保存在变量中,然后将其更改回来而不是访问sys.__stdout__
import sys
print('###################################Genarating Global Variables##########################')
storage_file = open("Storage-output.txt", 'w')
sys.stdout = storage_file
print ('what')
storage_file.close()
sys.stdout = sys.__stdout__ # return to its original value as stated in https://docs.python.org/2/library/sys.html#sys.__stdout__
print('Completed Global variables creation')