为了账号安全,请及时绑定邮箱和手机立即绑定

pythonw 3.6.6 sys.stdout 在重新分配时什么也不做

pythonw 3.6.6 sys.stdout 在重新分配时什么也不做

呼唤远方 2021-12-26 10:46:02
我正在尝试调试我正在编写的 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 路径。


查看完整回答
反对 回复 2021-12-26
  • 1 回答
  • 0 关注
  • 224 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号