【问题标题】:How to disable print statements conveniently so that pythonw can run?如何方便地禁用打印语句以便 pythonw 可以运行?
【发布时间】:2014-11-10 05:19:41
【问题描述】:

我有一个在控制台上正常运行的 python 脚本 (.py)。当我尝试通过将扩展名更改为 (.pyw) 来使用 pythonw 运行脚本时,它停止工作。我的猜测是,根据 Google 搜索返回的结果,打印语句导致 pythonw 死亡。

有没有一种方便的方法来禁用打印语句以便 pythonw 可以运行?我的脚本中有太多的打印语句。一个一个地改变它们是不切实际的,特别是如果我想切换回使用普通的python。

谢谢。

【问题讨论】:

  • 我不知道什么是 pythonw,但听起来你想打印为 null,有效地使这个问题重复。 stackoverflow.com/questions/6735917/…
  • "My guess is that the print statements are causing pythonw to die" - 不,在我的快速测试中似乎不是这样。

标签: python pythonw


【解决方案1】:

创建您自己的打印函数,例如out,然后将所有prints 更改为out。然后可以将 out 方法更改一次以输出到控制台或文件。

【讨论】:

  • 如果您使用调用 print 的库函数,您将如何使用此解决方案?
【解决方案2】:

我从另一个 StackOverflow 线程中发现了一个对我很有效的答案。我已经对答案投了赞成票。功劳不是我的。如果您想投票,请转到该链接并投票。请参阅下面的链接。

Can I get the output of "print" statement in pythonw?

您可以通过分配给 sys.stdout 来全局重定向标准输出:

import sys sys.stdout = open("mylog.txt", "w") 然后程序的其他标准输出,包括打印语句,将转到 mylog.txt。

【讨论】:

    【解决方案3】:

    只需将所有输出重定向到 /dev/null。 Python 有一种与平台无关的方式来执行此操作。

    import os
    import sys
    
    # Only redirect for pythonw not regular python.
    if os.path.splitext(os.path.basename(sys.executable))[0] == 'pythonw':
        sys.stdout = open(os.devnull, 'w')
        sys.stderr = open(os.devnull, 'w')
    

    【讨论】:

      猜你喜欢
      • 2023-01-03
      • 1970-01-01
      • 1970-01-01
      • 2019-09-29
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      • 2010-11-15
      • 2017-07-30
      相关资源
      最近更新 更多