pythonw 3.6.6 sys.stdout在重新分配时不执行任何操作 - python

我尝试调试正在编写的pythonw脚本,因为通过空闲启动它时,它可以正常工作,但是通过cmd或双击它启动时,它会崩溃。我目前失败的代码是

import sys
sys.stdout = open("mylog.txt", "w")
sys.stderr = open("errors.txt", "w")
print("hello world")
import thisisgonnafail
print(sys.executable)

确实会创建文件,正如notepad ++告诉我的那样,文件已更新,但是文件都始终为空,即使它们应该将导入中的错误消息设置为失败,也打印行

参考方案

您上面发布的代码应该可以工作。您遇到的问题很可能是在流仍处于打开状态时检查文件。使用open()时,始终需要以某种方式关闭流。除非您执行此操作,否则通过其他方法(例如,手动打开文件)检查文件时,对文件的更改将对您不可见。

在此示例中,您可以通过重新分配sys.stdoutsys.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()

上面的代码可让您测试是否已触发了除外路径。

sys.argv可以处理可选参数吗? - python

from sys import argv script, lira_cbt, [eur_hedge] = argv if eur_hedge == None: #Do x else: #Do y 我希望它能够只使用lira_cbt作为参数(执行x),或者同时使用lira_cbt和eur_hedge(执行y)运行。可以使用sys.argv实现吗? python…

如何将Python安装目录打印到输出? - python

假设Python安装在该位置 C:\ TOOLS \ COMMON \ python \ python252我想在程序输出中打印此位置。请让我知道我可以这样做。 python大神给出的解决方案 您可以使用import sys, os os.path.dirname(sys.executable) 但请记住,与在Unix系统中相比,程序的“安装”通常是沿着以下…

Python-crontab模块 - python

我正在尝试在Linux OS(CentOS 7)上使用Python-crontab模块我的配置文件如下:{ "ossConfigurationData": { "work1": [ { "cronInterval": "0 0 0 1 1 ?", "attribute&…

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

Python Pandas导出数据 - python

我正在使用python pandas处理一些数据。我已使用以下代码将数据导出到excel文件。writer = pd.ExcelWriter('Data.xlsx'); wrong_data.to_excel(writer,"Names which are wrong", index = False); writer.…