将输出重定向到文件并获得I / O错误

时间:2017-03-25 14:20:53

标签: python redirect

我正在尝试将输出重定向到文件

下面的代码工作正常

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

基本上我需要的是,一些打印输出应该转到文件,一些打印输出应该显示在终端中。为此,我计划在脚本中根据需要打开文件并关闭文件。

2 个答案:

答案 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')