我正在尝试调试我正在编写的 pythonw 脚本,因为它在通过空闲启动时可以正常工作,但是在通过 cmd 启动或双击它时会崩溃。我目前失败的代码是import syssys.stdout = open("mylog.txt", "w")sys.stderr = open("errors.txt", "w")print("hello world")import thisisgonnafailprint(sys.executable)它确实创建了文件,正如记事本 ++ 告诉我文件已更新,但文件都始终为空,即使它们应该具有设置为失败的导入的错误消息,以及打印行
1 回答
胡说叔叔
TA贡献1804条经验 获得超8个赞
您上面发布的代码应该可以工作。您遇到的问题很可能是在流仍然打开时检查文件。使用时,open()您总是需要以某种方式关闭流。在您执行此操作之前,通过其他方法(例如手动打开文件)检查文件时,您将看不到文件的更改。
在这个例子中,您可以通过重新分配做到这一点无论是sys.stdout和sys.stderr或通过调用close()(首选方法,因为它是更加明确和处理流预期的方式),对他们这样的:sys.stdout.close()。
另外,请注意,如果您要多次打开和关闭它们,最好使用"a"追加到文件中,而不是一直重写内容。
编辑:您在评论中询问以这种方式做事时处理错误。您建议的方法是正确的,您可以try/except部分代码并except关闭流。
import sys
sys.stderr = open("e.txt", "a")
try:
import nonexistingmodule
print 'Should not be printed out'
except:
print 'Should be printed out'
sys.stderr.close()
上面的这段代码可以让您测试是否触发了 except 路径。
添加回答
举报
0/150
提交
取消
