我在将终端输出(所有打印语句)写入文本文件然后在同一脚本中读取该文本文件时遇到问题。如果我关闭程序以完成对文件的写入然后重新打开文件以读取它,或者没有输出最终打印(file_contents)语句,我会一直收到I / O错误。
这是我的代码:
import sys
filename = open("/Users/xxx/documents/python/dump.txt", 'r+')
filename.truncate()
sys.stdout = filename
print('Hello')
print('Testing')
filename.close()
with open("/Users/xxx/documents/python/dump.txt") as file:
data = file.read()
print(file)
任何建议都会很棒!我打算用它来将输出从一些较长的脚本打印到一个松弛的通道。
谢谢!
答案 0 :(得分:0)
你得到的错误是:
IOError: [Errno 2] No such file or directory: '/Users/xxx/documents/python/dump.txt'
因为:
文件打开模式r+
不会创建文件。使用模式w
,如下所示:
您必须重新连接stdout
再次控制台才能在控制台中打印。
import sys
filename = open('/Users/xxx/documents/python/dump.txt', 'w')
# filename.truncate() # mode 'w' truncates file
sys.stdout = filename
print('Hello')
print('Testing')
filename.close()
# reattach stdout to console
sys.stdout = sys.__stdout__
with open('/Users/xxx/documents/python/dump.txt') as file:
data = file.read()
print(data)
将打印:
Hello
Testing
答案 1 :(得分:0)
问题是您将sys.stdout
重定向到filename
,然后关闭该文件。之后,由于文件已关闭,您无法再打印任何内容。
sys.stdout = filename
..
..
filename.close()
with open("/Users/xxx/documents/python/dump.txt") as file:
data = file.read()
print(file)
最后一个print语句尝试打印输出到 sys.stdout ,这是一个已关闭的文件。
如果您想恢复旧行为,则需要保留对sys.stdout
的引用。这将解决它:
sys_out = sys.stdout
sys.stdout = filename
..
..
filename.close()
sys.stdout = sys_out
with open("/Users/xxx/documents/python/dump.txt") as file:
data = file.read()
print(file)
答案 2 :(得分:0)
导入sys
filename = open(“/ Users / xxx / documents / python / dump.txt”,“w”)
sys_out = sys.stdout sys.stdout = filename
打印( '你好')
打印( '试验')
打印( '试验')
filename.close()
sys.stdout = sys_out
以open(“/ Users / xxx / documents / python / dump.txt”,“r”)作为文件: data = file.read() 打印(数据)